# 绘制雷达图

# 使用 polar() 绘制雷达图

# 使用 pyplot 的 polar() 函数可以快速绘制雷达图,polar() 函数的语法格式如下所示 :

polar(theta, r, **kwargs)

# 该函数常用参数的含义如下。

# · theta :表示每个数据点所在射线与极径的夹角。
· r :表示每个数据点到原点的距离。

# 实例9:霍兰德职业兴趣测试

# 霍兰德职业兴趣测试是美国职业指导专家霍兰德根据他本人大量的职业咨询经验及其职业类型理论编制的测评工具。根据个人兴趣的不同,霍兰德将人格分为研究型(I)、艺术型(A)、社会型(S)、企业型(E)、传统型(C)和现实型(R)6 个维度,每个人的性格都是这 6 个维度不同程度的组合。假设现在 6名用户分别进行了测试,得出的测试结果如表 2-8 所示。

image

# 根据表 2-8 的数据,将标题一行的数据作为雷达图的标签,将其余行的数据作为雷达图的数据,使用 polar() 函数绘制霍兰德职业兴趣测试结果的雷达图,具体代码如下。

In [24]:
# 09_holland_professional_interest_test
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
dim_num = 6
data = np.array([[0.40, 0.32, 0.35, 0 30, 0.30, 0.88],
                 [0.85, 0.35, 0.30, 0.40, 0.40, 0.30],
                 [0.43, 0.89, 0.30, 0.28, 0.22, 0.30],
                 [0.30, 0.25, 0.48, 0.85, 0.45, 0.40] ,
                 [0.20, 0.38, 0.87, 0.45, 0.32, 0.28],
                 [0.34, 0.31, 0.38, 0.40, 0.92, 0.28]])
angles = np.linspace(0, 2 * np.pi, dim_num, endpoint=False)
angles = np.concatenate((angles, [angles[0]]))
data = np.concatenate((data, [data[0]]))
# 维度标签
rradar_labels=['研究型(I)', '艺术型(A)', '社会型(S)',
               '企业型(E)', '传统型(C)', '现实型(R)']
radar_labels = np.concatenate((radar_labels, [radar_labels[0]]))
# 绘制雷达图
plt.polar (angles, data)
# 设置极坐标的标签
plt.thetagrids(angles * 180/np.pi, labels=radar_labels)
# 填充多边形
plt.fill(angles, data, alpha=0.25)
plt.show ()

# 运行程序,效果如图 2-22 所示。

image

# 图 2-22 中,紫色的多边形代表用户 1 的测试结果;棕色的多边形代表用户 2 的测试结果;蓝色的多边形代表用户 3 的测试结果;红色的多边形代表用户 4 的测试结果;橙色的多边形代表用户 5 的测试结果;绿色的多边形代表用户 6 的测试结果。由图 2-22 可知,用户 1 偏向于现实型人格;用户 2 偏向于研究型人格;用户 3 偏向于艺术型人格;用户 4 偏向于企业型人格;用户 5 偏向于社会型人格;用户 6 偏向于传统型人格。