最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何利用Python matplotlib繪制雷達(dá)圖

 更新時(shí)間:2020年12月21日 14:46:39   作者:Python碎片  
這篇文章主要給大家介紹了關(guān)于如何利用Python matplotlib繪制雷達(dá)圖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

本篇文章介紹使用matplotlib繪制雷達(dá)圖。

雷達(dá)圖也被稱為網(wǎng)絡(luò)圖,蜘蛛圖,星圖,蜘蛛網(wǎng)圖,是一個不規(guī)則的多邊形。雷達(dá)圖可以形象地展示相同事物的多維指標(biāo),雷達(dá)圖幾乎隨處可見,應(yīng)用場景非常多。

一、matplotlib繪制圓形雷達(dá)圖

# coding=utf-8
import numpy as np
import matplotlib.pyplot as plt
 
 
results = [{"大學(xué)英語": 87, "高等數(shù)學(xué)": 79, "體育": 95, "計(jì)算機(jī)基礎(chǔ)": 92, "程序設(shè)計(jì)": 85},
   {"大學(xué)英語": 80, "高等數(shù)學(xué)": 90, "體育": 91, "計(jì)算機(jī)基礎(chǔ)": 85, "程序設(shè)計(jì)": 88}]
data_length = len(results[0])
# 將極坐標(biāo)根據(jù)數(shù)據(jù)長度進(jìn)行等分
angles = np.linspace(0, 2*np.pi, data_length, endpoint=False)
labels = [key for key in results[0].keys()]
score = [[v for v in result.values()] for result in results]
# 使雷達(dá)圖數(shù)據(jù)封閉
score_a = np.concatenate((score[0], [score[0][0]]))
score_b = np.concatenate((score[1], [score[1][0]]))
angles = np.concatenate((angles, [angles[0]]))
labels = np.concatenate((labels, [labels[0]]))
# 設(shè)置圖形的大小
fig = plt.figure(figsize=(8, 6), dpi=100)
# 新建一個子圖
ax = plt.subplot(111, polar=True)
# 繪制雷達(dá)圖
ax.plot(angles, score_a, color='g')
ax.plot(angles, score_b, color='b')
# 設(shè)置雷達(dá)圖中每一項(xiàng)的標(biāo)簽顯示
ax.set_thetagrids(angles*180/np.pi, labels)
# 設(shè)置雷達(dá)圖的0度起始位置
ax.set_theta_zero_location('N')
# 設(shè)置雷達(dá)圖的坐標(biāo)刻度范圍
ax.set_rlim(0, 100)
# 設(shè)置雷達(dá)圖的坐標(biāo)值顯示角度,相對于起始角度的偏移量
ax.set_rlabel_position(270)
ax.set_title("計(jì)算機(jī)專業(yè)大一(上)")
plt.legend(["弓長張", "口天吳"], loc='best')
plt.show()

運(yùn)行結(jié)果:

繪制雷達(dá)圖需要先建立極坐標(biāo)系,關(guān)于極坐標(biāo)系可以自己了解一下。建立好極坐標(biāo)后可以在極坐標(biāo)中繪制折線圖、柱狀圖等,大部分情況,都是用折線圖,形成一個不規(guī)則的閉合多邊形。本文中用某高校大一的期末考試成績作為例子來演示雷達(dá)圖的效果。

linspace(): 用于將極坐標(biāo)根據(jù)數(shù)據(jù)的維度進(jìn)行等分,第一個參數(shù)傳入起始角度,第二參數(shù)傳入結(jié)束角度,第三個參數(shù)傳入分成多少等份。其他參數(shù)根據(jù)需要傳入,如endpoint默認(rèn)為True,最后一個數(shù)據(jù)處于結(jié)束的角度,根據(jù)本例中前面的參數(shù)0~2π,應(yīng)該設(shè)置為False,否則最后一個數(shù)據(jù)與第一個數(shù)據(jù)角度重疊了。

concatenate(): 使雷達(dá)圖的數(shù)據(jù)是環(huán)形封閉的,concatenate()函數(shù)的第一個參數(shù)是一個元組,元組中的每個元素是一個數(shù)組,concatenate()函數(shù)將這些數(shù)組連接到一起,組成一個新的數(shù)組。要讓繪制的雷達(dá)圖封閉,將數(shù)據(jù)的第一個值連接到數(shù)據(jù)的結(jié)尾即可。

本文用折線圖plot()來繪制雷達(dá)圖,使用figure()函數(shù)設(shè)置好圖形的大小和清晰度,然后使用subplot()函數(shù)來創(chuàng)建一張子圖。subplot()函數(shù)的第一個參數(shù)傳入長度為3的數(shù)字,第一個數(shù)字表示將畫布分成幾行,第二個數(shù)字表示將畫布分成幾列,第三個數(shù)字表示當(dāng)前的子圖處于哪個位置(按從左至右、從上到下的順序排序),第三個數(shù)字不能超出前兩個數(shù)字切分的子圖數(shù)范圍。如111表示將畫布分成一行一列(只有一張子圖),當(dāng)前的子圖處于第一張子圖中。在subplot()函數(shù)中,將polar參數(shù)設(shè)置True,得到的圖形才是極坐標(biāo)。

極坐標(biāo)系設(shè)置完成后,使用子圖對象ax調(diào)用折線圖函數(shù)plot(),即可繪出雷達(dá)圖。如果有多組數(shù)據(jù),多次調(diào)用plot()函數(shù)即可。

使用set_thetagrids()函數(shù)設(shè)置雷達(dá)圖中每個維度的標(biāo)簽和顯示位置。使用set_theta_zero_location()函數(shù)設(shè)置雷達(dá)圖的0度位置,可以傳入"N"、"NW"、"W"、"SW"、"S"、"SE"、"E"、"NE"八個方位縮寫。使用set_rlim()函數(shù)設(shè)置極坐標(biāo)上的刻度范圍。使用set_rlabel_position()函數(shù)設(shè)置極坐標(biāo)上的刻度標(biāo)簽顯示位置,傳入一個相對于雷達(dá)圖0度的角度值。當(dāng)然還可以根據(jù)需要設(shè)置其他屬性,如標(biāo)題、圖例等。

在上面的例子中,將兩位同學(xué)的考試成績繪制成了雷達(dá)圖,通過雷達(dá)圖,可以看出兩個人的單科成績互有高低,而整體來看,兩位同學(xué)成績都很優(yōu)秀。上面的雷達(dá)圖中,網(wǎng)格線都是圓形的,而用折線圖連接的雷達(dá)圖兩個維度之間是直接連接的,所以將網(wǎng)格線換成多邊形會更合理一點(diǎn)。

二、matplotlib繪制多邊形雷達(dá)圖

import numpy as np
import matplotlib.pyplot as plt
 
 
results = [{"大學(xué)英語": 87, "高等數(shù)學(xué)": 79, "體育": 95, "計(jì)算機(jī)基礎(chǔ)": 92, "程序設(shè)計(jì)": 85},
   {"大學(xué)英語": 80, "高等數(shù)學(xué)": 90, "體育": 91, "計(jì)算機(jī)基礎(chǔ)": 85, "程序設(shè)計(jì)": 88}]
data_length = len(results[0])
angles = np.linspace(0, 2*np.pi, data_length, endpoint=False)
labels = [key for key in results[0].keys()]
score = [[v for v in result.values()] for result in results]
score_a = np.concatenate((score[0], [score[0][0]]))
score_b = np.concatenate((score[1], [score[1][0]]))
angles = np.concatenate((angles, [angles[0]]))
labels = np.concatenate((labels, [labels[0]]))
fig = plt.figure(figsize=(10, 6), dpi=100)
fig.suptitle("計(jì)算機(jī)專業(yè)大一(上)")
ax1 = plt.subplot(121, polar=True)
ax2 = plt.subplot(122, polar=True)
ax, data, name = [ax1, ax2], [score_a, score_b], ["弓長張", "口天吳"]
for i in range(2):
 for j in np.arange(0, 100+20, 20):
  ax[i].plot(angles, 6*[j], '-.', lw=0.5, color='black')
 for j in range(5):
  ax[i].plot([angles[j], angles[j]], [0, 100], '-.', lw=0.5, color='black')
 ax[i].plot(angles, data[i], color='b')
 # 隱藏最外圈的圓
 ax[i].spines['polar'].set_visible(False)
 # 隱藏圓形網(wǎng)格線
 ax[i].grid(False)
 for a, b in zip(angles, data[i]):
  ax[i].text(a, b+5, '%.00f' % b, ha='center', va='center', fontsize=12, color='b')
 ax[i].set_thetagrids(angles*180/np.pi, labels)
 ax[i].set_theta_zero_location('N')
 ax[i].set_rlim(0, 100)
 ax[i].set_rlabel_position(0)
 ax[i].set_title(name[i])
plt.show()

運(yùn)行結(jié)果:

在極坐標(biāo)系中,極徑值相等的點(diǎn)在一個圓上,所以繪制的雷達(dá)圖中,網(wǎng)格線默認(rèn)都是圓形的。如果要繪制多邊形的雷達(dá)圖,則需要將圓形的網(wǎng)格線隱藏,然后根據(jù)刻度范圍繪制出多邊形的網(wǎng)格線。

首先使用plot()函數(shù),根據(jù)刻度范圍,繪制出同心的多個多邊形和多個維度方向的極軸,作為雷達(dá)圖的網(wǎng)格線,形成一張“網(wǎng)”。

鏈?zhǔn)秸{(diào)用極坐標(biāo)的spines['polar'].set_visible()函數(shù),傳入?yún)?shù)False,將極坐標(biāo)系最外圈的圓形隱藏。調(diào)用grid()函數(shù),傳入?yún)?shù)False,將極坐標(biāo)系中的的圓形網(wǎng)格線隱藏。

修改完網(wǎng)格線后,即可達(dá)到多邊形的效果。在第二次繪制雷達(dá)圖時(shí),將兩位同學(xué)的成績分到兩張不同的雷達(dá)圖中,并用text()設(shè)置了每個維度的數(shù)據(jù)標(biāo)注,使用suptitle()函數(shù)來設(shè)置整張圖形的標(biāo)題。

上面的兩次繪圖,將兩位同學(xué)的成績繪制在同一張雷達(dá)圖時(shí),更方便對比兩位同學(xué)的成績,如比較誰更全面、更優(yōu)秀。分開繪制時(shí),更方便分析個人的成績情況,如是否偏科。而相對于圓形的雷達(dá)圖,在多邊形的雷達(dá)圖中,不會出現(xiàn)雷達(dá)圖與網(wǎng)格線的不合理交叉(雷達(dá)圖與網(wǎng)格線交叉兩次),使用多邊形網(wǎng)格線更合理。

到此這篇關(guān)于如何利用Python matplotlib繪制雷達(dá)圖的文章就介紹到這了,更多相關(guān)Python matplotlib繪制雷達(dá)圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python微元法計(jì)算函數(shù)曲線長度的方法

    python微元法計(jì)算函數(shù)曲線長度的方法

    今天小編就為大家分享一篇python微元法計(jì)算函數(shù)曲線長度的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Pycharm如何打斷點(diǎn)的方法步驟

    Pycharm如何打斷點(diǎn)的方法步驟

    這篇文章主要介紹了Pycharm如何打斷點(diǎn)的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python將HTML快速轉(zhuǎn)換成PDF的方法實(shí)現(xiàn)

    Python將HTML快速轉(zhuǎn)換成PDF的方法實(shí)現(xiàn)

    在Web開發(fā)和報(bào)告任務(wù)中,將HTML內(nèi)容轉(zhuǎn)換為PDF是一種常見需求,本文主要介紹了Python將HTML快速轉(zhuǎn)換成PDF的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Python數(shù)據(jù)分析之雙色球統(tǒng)計(jì)兩個紅和藍(lán)球哪組合比例高的方法

    Python數(shù)據(jù)分析之雙色球統(tǒng)計(jì)兩個紅和藍(lán)球哪組合比例高的方法

    這篇文章主要介紹了Python數(shù)據(jù)分析之雙色球統(tǒng)計(jì)兩個紅和藍(lán)球哪組合比例高的方法,涉及Python數(shù)值運(yùn)算及圖形繪制相關(guān)操作技巧,需要的朋友可以參考下
    2018-02-02
  • python對json的相關(guān)操作實(shí)例詳解

    python對json的相關(guān)操作實(shí)例詳解

    這篇文章主要介紹了python對json的相關(guān)操作,結(jié)合實(shí)例形式詳細(xì)分析了json的概念、功能以及Python針對json的解析、輸出、排序、轉(zhuǎn)換等操作技巧,需要的朋友可以參考下
    2017-01-01
  • OpenCV?光流Optical?Flow示例

    OpenCV?光流Optical?Flow示例

    這篇文章主要為大家介紹了OpenCV?光流Optical?Flow示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 探索Python數(shù)據(jù)可視化庫中Plotly Express的使用方法

    探索Python數(shù)據(jù)可視化庫中Plotly Express的使用方法

    在數(shù)據(jù)分析和可視化領(lǐng)域,數(shù)據(jù)的有效呈現(xiàn)是至關(guān)重要的,python作為一種強(qiáng)大的編程語言,提供了多種數(shù)據(jù)可視化工具和庫,本文將介紹Plotly Express的基本概念和使用方法,幫助讀者快速入門并掌握數(shù)據(jù)可視化的技巧
    2023-06-06
  • Python PyCryptodome庫介紹與實(shí)例教程

    Python PyCryptodome庫介紹與實(shí)例教程

    PyCryptodome提供了豐富的加密功能,可以滿足多種安全需求,本文介紹了幾個常見的使用場景,包括對稱加密、非對稱加密、哈希函數(shù)和消息認(rèn)證碼,感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • Python?PySpark案例實(shí)戰(zhàn)教程

    Python?PySpark案例實(shí)戰(zhàn)教程

    PySpark是由Spark官方開發(fā)的Python語言第三方庫,Python開發(fā)者可以使用pip程序快速的安裝PySpark并像其它三方庫那樣直接使用,本文給大家介紹Python?PySpark案例實(shí)戰(zhàn),感興趣的朋友一起看看吧
    2023-09-09
  • 淺談Python的元編程

    淺談Python的元編程

    提到元這個字,你也許會想到元數(shù)據(jù),元數(shù)據(jù)就是描述數(shù)據(jù)本身的數(shù)據(jù),元類就是類的類,本文的主要目的是向大家介紹這些元編程技術(shù),并且給出實(shí)例來演示它們是怎樣定制化源代碼的行為。剛興趣的朋友可以參考一下
    2021-09-09

最新評論

象山县| 全州县| 龙州县| 大埔区| 寻乌县| 鱼台县| 拜城县| 虎林市| 阳山县| 梅州市| 咸丰县| 永城市| 杨浦区| 辛集市| 城固县| 会东县| 大荔县| 金沙县| 凤阳县| 同德县| 神木县| 宁国市| 阿巴嘎旗| 禄劝| 梨树县| 奇台县| 武穴市| 海淀区| 浦北县| 高陵县| 舞钢市| 观塘区| 新晃| 和林格尔县| 咸阳市| 叙永县| 沙雅县| 无极县| 建德市| 广元市| 兴仁县|