文章目录
- 简介
- 用到的第三方库介绍
- 代码实例
简介
雷达图是通过多个离散属性,以此来比较对象的最为直观的工具。如果能掌握雷达图的绘制,可以为学习工作以及生活带来便利和乐趣。
用到的第三方库介绍
Numpy库:NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
Matplotlib库:Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。 它也可以和图形工具包一起使用,如 PyQt 和 wxPython。
代码实例
在编写代码前,我们需要对霍兰德职业兴趣理论有一定的了解。这个理论认为人格类型、兴趣、和职业之间有关系,于是将人格分为了现实性、研究型、艺术型、社会型、企业型和常规型。基于上面的分类,因此可以绘制一个展现职业人格类型的雷达图。我们将以工程师、实验员、艺术家、推销员、社会工作者、记事员这六个职业数据为例子绘制图形。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
radar_labels = np.array(['研究型(I)','艺术型(A)','社会型(S)','企业型(E)','常规型(C)','现实型(R)'])
nAttr = 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]])
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()
属性标签存放在data_labels中,数据存放在data中,np.linspace设置起点0,末值为2π,返回两端点间数值平均分布的长为nAttr的数组angle,他表示一个属性点到下一个属性点笔画需要旋转的角度,取决于nAttr的大小,即雷达图的多边数。np.concatenate函数作用虽然是能够使图片首尾相连,但是在2020年之后的新版本中,matplotlib不需要再进行np.concatenate了,因此需要在plt.thetagrids中对angle进行[:-1]切片,接下来就是设置坐标、颜色等事项。实例的完成图如下所示: