• 参考文章: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后的雷达图效果如下:
    在这里插入图片描述
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐