plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False radar_labels = np.array(['用户A', '用户B', '用户C', '用户D']) nAttr = 4 # 图的边数 #建议优化这个功能 #从文件读取数据并绘图,问题点:1.文件的数据需要严格控制为4行,如果同一用户测了两次会报错 # 2.不能精确定位某一用户的数据,如果用户D先测,在图里会显示为用户A的数据 #建议:根据用户数量动态调整图的数据(有点难) or 让新的数据覆盖原有数据,如用户B测了多次,取最近一次的数据覆盖第二行(比前一个简单点) fo = open("record_num.txt", "r") data = [] for line in fo.readlines(): s = line.split() s = np.array([s[0], s[1], s[2]]) s = s.astype(np.float) data.append(s) fo.close() data_labels = ('状态', '答题速度', '答题准确率') # 属性标签 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='gray', linewidth=1, alpha=0.2) plt.plot(angles, data, 'o-', linewidth=1.5, alpha=0.2) plt.fill(angles, data, alpha=0.25) plt.thetagrids((angles * 180 / np.pi)[:-1], radar_labels) plt.figtext(0.52, 0.95, '单词测试分析图', ha='center', size=20) # 标题 legend = plt.legend(data_labels, loc=(0.94, 0.80), labelspacing=0.1) plt.setp(legend.get_texts(), fontsize='small') plt.grid(True) plt.savefig('holland_radar.jpg') plt.show() elif option == 0:
时间: 2024-04-20 19:24:51 浏览: 260
这段代码使用Matplotlib库绘制雷达图来展示用户的测试数据。首先,它设置了字体为SimHei以支持中文显示,并且禁用了Unicode减号显示问题。
接下来,它定义了一个包含用户标签的数组`radar_labels`,以及图形的边数`nAttr`(这里设置为4)。
然后,它打开一个名为`record_num.txt`的文件,并逐行读取其中的数据。每一行数据被拆分为一个字符串数组`line`,然后转换为浮点数类型的NumPy数组`np.array`,并将该数组添加到`data`列表中。
在读取完文件数据后,它定义了属性标签`data_labels`。
接下来,它使用`np.linspace()`函数生成一组角度,用于绘制雷达图的各个边。然后,它将数据数组`data`和角度数组`angles`进行连接,以确保雷达图的闭合性。
接着,它创建了一个白色背景的图形窗口,并使用`plt.subplot()`函数创建一个极坐标子图。
然后,它使用`plt.plot()`函数绘制了灰色的背景线条,并使用`plt.fill()`函数填充了区域。
接下来,它使用`plt.thetagrids()`函数在雷达图上绘制角度刻度线,并使用`plt.figtext()`函数添加了一个标题。
然后,它创建了一个图例,并将其放置在图形的右上角。
最后,它使用`plt.savefig()`函数保存雷达图为`holland_radar.jpg`文件,并使用`plt.show()`函数显示图形。
如果`option`的值为0,代码将会执行其他操作(在代码片段中没有给出)。
相关问题
分析下列代码:import pandas as pd import matplotlib.pyplot as plt data = pd.read_excel("E:\\爬取\\爬取.xls") year_count = data.groupby(by="年份")["年份"].count() data['年份'] = pd.to_numeric(data['年份'], errors='coerce') plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams['axes.unicode_minus'] = False plt.plot(year_count.index, year_count.values) plt.title("电影年份发展折线图") plt.xlabel("年份") plt.ylabel("数量") plt.show() import pandas as pd import matplotlib.pyplot as plt data = pd.read_excel("E:\\爬取\\爬取.xls") plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams['axes.unicode_minus'] = False year_count = data['国家'].value_counts() plt.bar(year_count.index, year_count.values) plt.title("各个国家电影数量") plt.xlabel("国家") plt.ylabel("电影数量") plt.show() import pandas as pd import matplotlib.pyplot as plt data = pd.read_excel("E:\\爬取\\爬取.xls") plt.rcParams["font.sans-serif"] = ["SimHei"] plt.rcParams['axes.unicode_minus'] = False type_count = data["类型"].value_counts() plt.pie(type_count,labels=type_count.index,pctdistance=0.8,autopct='%1.1f%%',explode=[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.01]) plt.figure(figsize=(20,6.5)) plt.title("电影主要类型分布图") plt.show() import pandas as pd import matplotlib.pyplot as plt data = pd.read_excel("E:\\爬取\\爬取.xls") scores = data["排名"].values votes = data["评价人数"].values plt.rcParams["font.sans-serif"] = ["SimHei"] plt.scatter(scores, votes) plt.title("排名与评价人数散点图") plt.xlabel("排名") plt.ylabel("评价人数") plt.show()
这段代码主要是用来对爬取到的电影数据进行数据可视化的处理。在代码中使用了 pandas 库对 Excel 数据进行读取和处理,使用了 matplotlib 库来绘制各种图表。
第一个代码块绘制了电影年份的发展折线图,其中先对年份进行了分组统计,然后使用 plot 函数将结果绘制出来。
第二个代码块绘制了各个国家电影数量的柱状图,其中使用了 value_counts 函数对国家进行统计,然后使用 bar 函数将结果绘制出来。
第三个代码块绘制了电影主要类型分布的饼图,其中使用了 value_counts 函数对电影类型进行统计,然后使用 pie 函数将结果绘制出来。
第四个代码块绘制了排名与评价人数的散点图,其中使用了 scatter 函数将排名和评价人数进行散点绘制。
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False data_a = np.array([85.5, 91, 72, 59, 66, 55]) data_b = np.array([94, 82, 89.5, 62, 49, 53]) plt.boxplot([data_a, data_b], labels=('男生各科平均成绩', '女生各科平均成绩'), meanline=True, widths=0.5, vert=False, patch_artist=True) plt.title('高二男生和女生各科平均成绩') plt.xlim(40, 100) plt.show()转为堆积面积图并美化
由于盒图和堆积面积图的图形表达方式不同,不能简单地将盒图转换为堆积面积图。以下是一个堆积面积图的例子,用于对比两组数据的占比情况:
```python
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data_a = np.array([85.5, 91, 72, 59, 66, 55])
data_b = np.array([94, 82, 89.5, 62, 49, 53])
fig, ax = plt.subplots()
ax.stackplot(range(len(data_a)), data_a, data_b, labels=('男生各科平均成绩', '女生各科平均成绩'))
ax.set_title('高二男生和女生各科平均成绩')
ax.set_xlim(0, len(data_a)-1)
ax.set_ylim(0, 200)
ax.legend(loc='upper left')
plt.show()
```
在这个例子中,我们使用了`stackplot()`函数来绘制堆积面积图。函数的第一个参数是X轴数据,第二个和第三个参数是两组数据,用于堆积在一起。我们还使用`labels`参数添加了图例,并使用`set_xlim()`和`set_ylim()`方法来设置X轴和Y轴的范围。
最后,我们可以使用各种美化技巧来增强图形的可读性,例如添加轴标签、调整字体大小和颜色等。
阅读全文