简易的雷达图示例

要用到Numpy库和Matplotlib库,以一个简单的例题为例,统计各班的6科成绩并用雷达图表示。

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
courses = np.array(['语文', '数学', '英语', '物理', '化学', '生物'])
class_scores = [
    np.array([95, 75, 86, 96, 93, 76]),
    np.array([85, 66, 96, 63, 85, 93]),
    np.array([91, 88, 67, 86, 76, 87])
]

for idx, scores in enumerate(class_scores, start=1):
    angles = np.linspace(0, 2 * np.pi, len(courses), endpoint=False)
    scores_padded = np.concatenate((scores, [scores[0]]))
    angles_padded = np.concatenate((angles, [angles[0]]))
    plt.polar(angles_padded, scores_padded, "o-", linewidth=3, label=f"高二{idx}班")
plt.thetagrids(angles * 180 / np.pi, courses, fontproperties="SimHei")
plt.title("成绩评估")
plt.legend(loc=(0.94, 0.80), labelspacing=0.1)
plt.show()c
程序分析:
  1. 导入库:

    • 导入numpy库并简写为np,用于数组操作和数学计算。
    • 导入matplotlib.pyplot库并简写为plt,用于数据可视化,特别是绘制图表。
  2. 设置字体:

    • 为了使中文能够正常显示在图表中,设置了matplotlib的字体配置,指定中文字体为'SimHei'(黑体),并关闭了负号的Unicode编码问题,确保减号能正确显示。
  3. 定义科目数组:

    • courses数组存储了六个科目的名称,分别是:语文、数学、英语、物理、化学、生物。
  4. 定义班级成绩数据:

    • class_scores是一个二维列表(实际上是NumPy数组的列表),包含了三个班级在六门课程上的成绩数据。
  5. 绘制雷达图循环:

    • 使用enumerate函数遍历每个班级的成绩数据,同时通过start=1参数使索引从1开始计数,对应高二1班、高二2班、高二3班。
    • 对于每个班级,执行以下步骤:
      • 计算每个扇区的角度,使用linspace函数从0到2π(不包括2π),确保角度均匀分布且与科目数量相匹配。
      • 为了闭合图形,将成绩列表首位相连(即在成绩列表末尾添加第一个成绩,在角度列表末尾添加第一个角度)。
      • 调用plt.polar函数绘制雷达图,其中angles_paddedscores_padded分别为角度和成绩,"o-"指定了线型和标记点样式,linewidth=3设置了线条宽度,label参数为图例标签,如"高二1班"。
  6. 图表其他配置:

    • 使用thetagrids函数设置雷达图的轴标签,使其对应科目名称,并转换角度为度数显示,同时设置字体以便中文显示。
    • 设置图表标题为"成绩评估"。
    • 通过legend函数放置图例,调整其位置为(0.94, 0.80),并设置了labelspacing=0.1以微调图例的间距。
  7. 展示图表:最后,调用plt.show()显示绘制好的雷达图。

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值