matplotlib制作雷达图报错ValueError及连线不完整问题解决

本文解决了一个在使用matplotlib绘制雷达图时遇到的ValueError问题。错误源于数据和角度数组被闭合,而标签数组未闭合导致数量不匹配。通过简单地增加一个元素使标签数组也闭合,成功解决了该问题并生成了完整的雷达图。

在教材实例编写雷达图时出现ValueError,具体如下:

ValueError: The number of FixedLocator locations (7), usually from a call to set_ticks, does not match the number of ticklabels (6).

而原代码如下:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family']='SimHei'
matplotlib.rcParams['font.sans-serif'] = ['SimHei']
labels = np.array(['综合','KDA','发育','推进','生存','输出'])
nAttr = 6
data = np.array([7,5,6,9,8,7])
angles = np.linspace(0,2*np.pi,nAttr,endpoint=False)
data = np.concatenate((data,[data[0]]))
angles = np.concatenate((angles,[angles[0]]))
fig = plt.figure(facecolor="white")
plt.subplot(111,polar=True)
plt.plot(angles,data,'bo-',color ='g',linewidth=2)
plt.fill(angles,data,facecolor='g',alpha=0.25)
plt.thetagrids(angles*180/np.pi,labels)
plt.figtext(0.52,0.95,'DOTA能力值雷达图',ha='center')
plt.grid(True)
plt.show()

原因在于对array类型data、angles进行封闭时,未对labels进行相同操作,导致labels内元素个数与前两者不相同,从而出现ValueError。
之前在网上寻找解决方案,发现大多数答主选着将对data、angles进行封闭的语句注释掉,但这样就会导致雷达图不完整,缺少一条连线:
不完整的雷达图

而只需对labels同样进行封闭即可:

data = np.concatenate((data,[data[0]]))
angles = np.concatenate((angles,[angles[0]]))
labels=np.concatenate((labels,[labels[0]]))   #对labels进行封闭

最终运行结果

在使用matplotlib制作雷达时,如果遇到ValueError错误并且例未显示,可以尝试以下几个步骤来解决这个问题: 1. **检查数据格式**:确保传入的数据格式正确,雷达需要二维数组或列表。 2. **设置例**:确保在绘制雷达后调用`plt.legend()`来显示例。 3. **调整标签和标题**:确保标签和标题设置正确。 以下是一个示例代码,展示了如何正确绘制雷达并显示例: ```python import matplotlib.pyplot as plt import numpy as np # 示例数据 categories = ['A', 'B', 'C', 'D', 'E'] values1 = [4, 3, 5, 2, 4] values2 = [2, 5, 3, 4, 2] # 计算角度 angles = np.linspace(0, 2*np.pi, len(categories), endpoint=False) # 闭合形 values1 = np.concatenate((values1, [values1[0]])) values2 = np.concatenate((values2, [values2[0]])) angles = np.concatenate((angles, [angles[0]])) # 创建形 fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True)) # 绘制第一个雷达 ax.plot(angles, values1, 'o-', linewidth=2, label='Series 1') ax.fill(angles, values1, alpha=0.25) # 绘制第二个雷达 ax.plot(angles, values2, 'o-', linewidth=2, label='Series 2') ax.fill(angles, values2, alpha=0.25) # 设置类别标签 ax.set_xticks(angles[:-1]) ax.set_xticklabels(categories) # 添加例 plt.legend(loc='upper right', bbox_to_anchor=(1.3, 1.1)) # 显示形 plt.show() ``` 在这个示例中,我们首先定义了类别和对应的值,然后计算角度并闭合形。接着,我们创建了一个极坐标系,并在其中绘制了两个雷达。最后,我们设置了类别标签并添加了例。
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值