- 参考文章:https://blog.csdn.net/weixin_41555408/article/details/115453769
绘制雷达图原始代码
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
df = pd.read_excel('成绩表.xlsx')
plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
labels = np.array(['语文','数学','英语','物理','化学','生物']) #标签
dataLenth = 6 #数据长度
#计算女生、男生各科平均成绩
df1 = np.array(df[df['性别']=='女'].mean().round(2))
df2 = np.array(df[df['性别']=='男'].mean().round(2))
#print(df1-df2)
#设置雷达图的角度,用于平分切开一个平面
angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)
df1 = np.concatenate((df1, [df1[0]])) #使雷达图闭合
df2 = np.concatenate((df2, [df2[0]])) #使雷达图闭合
angles = np.concatenate((angles, [angles[0]])) #使雷达图闭合
plt.polar(angles, df1, 'r--', linewidth=2,label='女生') #设置极坐标系,r--代表red和虚线
plt.fill(angles, df1,facecolor='r',alpha=0.5) #填充
plt.polar(angles, df2,'b-', linewidth=2,label='男生') #设置极坐标系,bo代表blue和实心圆
plt.fill(angles, df2,facecolor='b',alpha=0.5) #填充
plt.thetagrids(angles * 180/np.pi, labels) #设置网格、标签
plt.ylim(0,140) #设置y轴上下限
plt.legend(loc='upper right',bbox_to_anchor=(1.2,1.1)) #图例及图例位置
plt.show()
雷达图报错如下
ValueError: The number of FixedLocator locations (7), usually from a call to set_ticks, does not match the number of ticklabels (6).
- 翻译:ValueError:FixedLocator 位置的数量 (7),通常来自对 set_ticks 的调用,与刻度标签的数量 (6) 不匹配。
原始雷达图如下
报错解释及解决方案(将没有闭合的数据进行闭合)
- 运行结果虽然能显示出雷达图,但是会有错误提示,且没有显示各个角度对应的属性名称。
- 因为女生数据df1、男生数据df2、角度angles都闭合了,所以这三个数据的长度就比labels数据长度多了1,故而出现了不匹配的现象。
- 因此,对labels标签也进行闭合,在第14行代码下面加一行闭合labels的代码:
labels = np.concatenate((labels,[labels[0]]))
- 加上闭合labels后的雷达图效果如下: