說明
搞了一個最新版本的雷達圖,比以前那個美觀。
不多說,代碼奉上:
完整代碼
'''
matplotlib雷達圖
'''
import numpy as np
import matplotlib.pyplot as plt
# 雷達圖
def plot_radar(labels, data, score):
'''
用法:
>>> labels = np.array(['藝術A','調研I','實際R','常規C','企業E','社會S']) #標簽
>>> data = np.array([1,4,3,6,4,8]) # 數據
>>> score = 10 # 表明數據是“十分制”。其可選的選項有1分制、5分制、10分制、100分制
>>> plot_radar(labels, data, score) # 畫雷達圖
'''
n = len(labels)
# 轉化為十分制!!!
if score in [5, 10, 100]:
data = data * 10/score
elif score == 1:
data = data * 10
angles = np.linspace(0 + np.pi/2, 2*np.pi + np.pi/2, n, endpoint=False) # 旋轉90度,從正上方開始!
data = np.concatenate((data, [data[0]])) # 閉合
angles = np.concatenate((angles, [angles[0]])) # 閉合
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)# 參數polar,表示極坐標!!
# 自己畫grid線(5條環形線)
for i in [2,4,6,8,10]:
ax.plot(angles, [i]*(n+1), 'b-',lw=0.5) # 之所以 n +1,是因為要閉合!
# 填充底色
ax.fill(angles, [10]*(n+1), facecolor='g', alpha=0.5)
# 自己畫grid線(6條半徑線)
for i in range(n):
ax.plot([angles[i], angles[i]], [0, 10], 'b-',lw=0.5)
# 畫線
ax.plot(angles, data, 'bo-', linewidth=2)
# 填充
#ax.fill(angles, data, facecolor='r', alpha=0.25)
ax.fill(angles, data, facecolor='r')
ax.set_thetagrids(angles * 180/np.pi, labels, fontproperties="SimHei")
ax.set_title("matplotlib雷達圖", va='bottom', fontproperties="SimHei")
ax.set_rlim(0,10)
# 下兩行去掉所有默認的grid線
ax.spines['polar'].set_visible(False) # 去掉最外圍的黑圈
ax.grid(False) # 去掉中間的黑圈
# 關閉數值刻度
ax.set_yticks([])
plt.show()
# 測試
if __name__ == '__main__':
labels = np.array(['藝術A','調研I','實際R','常規C','企業E','社會S']) #標簽
data = np.array([1,4,3,6,4,8]) # 數據
score = 10 # 表明數據是“十分制”。其可選的選項有1分制、5分制、10分制、100分制
# 畫雷達圖
plot_radar(labels, data, score)