代码:
# 导入所需库
import numpy as np
import matplotlib.pyplot as plt
# 设置中文字体和正常显示负号
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
dim_num = 6 # 维度数量
radians = np.linspace(0, 2 * np.pi, dim_num, endpoint=False) # 计算各个维度的角度
radians = np.concatenate((radians, [radians[0]])) # 将首尾相连,形成闭合的多边形
score_a = np.array([41, 38, 36, 62, 68, 100]) # A的得分数据
score_a = np.concatenate((score_a, [score_a[0]])) # 将首尾相连,形成闭合的多边形
score_b = np.array([91, 88, 83, 72, 78, 26]) # B的得分数据
score_b = np.concatenate((score_b, [score_b[0]])) # 将首尾相连,形成闭合的多边形
score_c = np.array([81, 78, 85, 76, 74, 36]) # C的得分数据
score_c = np.concatenate((score_c, [score_c[0]])) # 将首尾相连,形成闭合的多边形
# 绘制极坐标图
plt.polar(radians, score_a,
radians, score_b,
radians, score_c)
radar_labels = ['数学', '英语', '线代', '爬虫', '数据可视化', '吃喝玩乐']
radar_labels = np.concatenate((radar_labels, [radar_labels[0]]))
angles = radians * 180 / np.pi # 将弧度转换为角度,用于设置刻度标签
# 设置极坐标图的刻度标签
plt.thetagrids(angles, labels=radar_labels)
# 绘制填充区域,表示得分范围
plt.fill(radians, score_a, color='b', alpha=0.1)
plt.fill(radians, score_b, color='g', alpha=0.2)
plt.fill(radians, score_c, color='r', alpha=0.3)
# 显示图形
plt.show()
下面是对代码的解释:
- 导入需要的库:
numpy
用于数值计算,matplotlib.pyplot
用于绘图。 - 设置中文字体和正常显示负号,确保图表中的中文和负号显示正常。
- 定义变量
dim_num
表示维度数量,这里为6。 - 使用
np.linspace
函数计算出各个维度的角度,生成一个等差数列,范围是0到2π,将其存储在radians
数组中。 - 通过
np.concatenate
函数将radians
数组首尾相连,形成闭合的多边形。 - 分别定义A、B、C三个维度的得分数据,并使用
np.concatenate
函数将每个数组首尾相连,形成闭合的多边形。 - 使用
plt.polar
函数绘制极坐标雷达图,传入参数为radians
和相应的分数数组,可以同时绘制多个数据集的雷达图。 - 定义
radar_labels
数组,存储各个维度的标签,使用np.concatenate
函数将标签数组首尾相连。 - 将角度由弧度转换为角度,用于设置刻度标签。
- 使用
plt.thetagrids
函数设置极坐标图的刻度标签,传入参数为角度和标签数组。 - 使用
plt.fill
函数绘制填充区域,表示得分范围。传入参数为radians
和对应的分数数组,可以为不同的数据集设置不同的颜色和透明度。 - 使用
plt.show()
显示绘制的图形。
综上所述,该代码通过极坐标图展示了A、B、C三个数据集在不同维度上的得分情况,并使用填充区域表示得分范围。