IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 合工大----python实验作业3----matplotlib踩坑记录----set_thetagrids() -> 正文阅读

[人工智能]合工大----python实验作业3----matplotlib踩坑记录----set_thetagrids()

题目

在做python实验作业3的第四题的时候
在这里插入图片描述
需要使用matplotlib库,在前面的操作都没有太大的问题,在b站找了个教程跟着做,但是在set_thetagrids()函数,也就是给雷达图设置标签的时候出现了bug,这个bug我找了网络上的很多很多资源都没有得到解决,我一开始不知道哪里出错了,甚至我照着视频的代码原封不动打一遍,也会报这个错。
所以我推测set_thetagrids()报错很可能是由于python版本更新后,matplotlib库并没有向下兼容导致的
报错内容如下:
Traceback (most recent call last):
File “Z:@大二上\Python\实验三\T4.py”, line 27, in
ax.set_thetagrids(angles * 180/np.pi, labels)
File “Z:@大二上\Python\venv\lib\site-packages\matplotlib\projections\polar.py”, line 1336, in set_thetagrids
self.set_xticklabels(labels)
在这里插入图片描述
下面我给出我的用python3.9.5编译成功的代码

import numpy as np
import matplotlib.pyplot as plt
# 中文和负号的正常显示
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = False
# 读取文件
fp = open("./files/scoreRadar.txt",encoding="utf8")
values = []
for readline in fp.readlines():
    values.append(readline.strip().split('\t'))
print(values)
fp.close()
# 构造数据
labels = values[0][1:]
labels.append(values[0][1])
# 设置雷达图的角度,用于平分切开一个平面
angles = np.linspace(0, 2*np.pi, len(values[0][1:]), endpoint=False)
# 使雷达图封闭起来
for i in range(1, len(values)):
    values[i] = np.concatenate((values[i], [values[i][1]]))
angles = np.concatenate((angles, [angles[0]]))
# 绘图
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
for i in values[1:]:
    ax.plot(angles, list(map(int,i[1:])), '.-', linewidth=3)
# 设置标签
ax.set_thetagrids(angles * 180/np.pi, labels)
# 添加标题
plt.title('成绩单分析')
plt.show()

解决方法

  • set_thetagrids方法中的两个参数代表的含义
    set_thetagrids()方法需要两个参量,第一个为角度的列表,第二个为标签列表,也就是说让角度一一对应标签,实现对于雷达图各角度的标签设置。那么很显然,我们至少需要做到的前提就是让标签的个数和角度的个数一致
  • 参数所对应雷达图的数据是什么
    标签所对应的雷达图中的数据,其实就是上面用concatenate()函数分装的数据列表,而这个报错出现的原因也就是concatenate()函数所导致的
for i in range(1, len(values)):
values[i] = np.concatenate((values[i], [values[i][1]]))

我们不妨将这段封装后的values进行输出,就可以发现问题所在
在这里插入图片描述
很明显,各专业的成绩不再是一开始读取的成绩.

  • concatenate函数的背后原理
    concatenate函数自动帮我们将其第二个参数作为结束值,也就是在这个list列表的最后,使用了append方法,将第二个参数加入了列表的末尾,从而使得这条线形成闭环,就是说,这个列表的长度不再是原来的长度,而是原来的长度+1
  • 解决方案
    既然已经知道了是由于长度不同一所导致的结果,那么解决方案自然应该是将labels标签列表的长度变得和他一样就可以了。
labels = values[0][1:]
labels.append(values[0][1])

在labels标签的最后手动append标签的第一个数据(因为第一个数据不是课程名称,所以应该加入的是第二个,也就是索引为1的数据)。这样就可以成功输出了。
在这里插入图片描述
希望对大家有所帮助

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-13 22:26:32  更:2021-10-13 22:26:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:37:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码