雷达图
使用polar()绘制直方图。polar()函数的语法格式如下:
polar ( * args , ** kwargs )
调用: polar(theta, r, **kwargs)支持多个theta,r参数,格式字符串,如 plot.
常用参数:
theta : 表示每个数据点所在射线与极径的夹角
r : 表示每个数据点到原点的距离
导入模块
import numpy as np
import matplotlib.pyplot as plt
作业要求:
需求一: 请把B同学和C同学的成绩用雷达图展示在同一个绘图区域,并填充不同颜色和透明度 (只允许调用一次plt.polar和plt.fill) A同学: '数学','英语','线代','爬虫','数据可视化','吃喝玩乐' ---> 41,38,36,62,68,100 B同学:'数学','英语','线代','爬虫','数据可视化','吃喝玩乐' ---> 91,88,83,72,78,26 C同学:'数学','英语','线代','爬虫','数据可视化','吃喝玩乐' ---> 81,78,85,76,74,36
radar_labels = ['数学','英语','线代','爬虫','数据可视化','吃喝玩乐']
value = np.array([[41,38,36,62,68,100],
[91,88,83,72,78,26],
[81,78,85,76,74,36]])
用于正常显示符号
plt.rcParams['axes.unicode_minus'] = False
设置每个数据点的显示位置,在雷达图上用角度表示
angles=np.linspace(0, 2*np.pi,len(feature), endpoint=False)
angles=np.concatenate((angles,[angles[0]]))
feature = np.concatenate((feature,[feature[0]]))
绘图
fig=plt.figure(facecolor='white')
index0 = 0
subject_label = ['A同学','B同学','C同学']
for values in [value[0,:],value[1,:],value[2,:]]:
拼接数据首尾,使图形中线条封闭
values=np.concatenate((values,[values[0]]))
设置为极坐标格式
ax = fig.add_subplot(111, polar=True)
绘制折线图
ax.plot(angles, values, 'o-', linewidth=1,label=subject_label[index0])
填充颜色
ax.fill(angles, values, alpha=0.25)
设置图标上的角度划分刻度,为每个数据点处添加标签
ax.set_thetagrids(angles * 180/np.pi, feature)
设置雷达图的范围
ax.set_ylim(0,100)
index0 = index0 + 1
添加标题
plt.title('不同学生成绩分布雷达图')
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=1,frameon=False)
添加网格线
ax.grid(True)
展示图表
plt.show()
完整代码如下: