嵩天老师python课程【霍兰德人格分析图绘制】源代码报错的一种修改方法

# HollandRadarDraw.py  展示人格兴趣与职业之间一种内在的对应的关系
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei'#matplotlib.rcParams[‘font.family’]为设置字体
radar_labels = np.array(['研究型(I)', '艺术型(A)', '社会型(S)', \
                         '企业型(E)', '常规型(C)', '现实型(R)'])
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]])  # 数据值
#numpy.array([]),意为设置多维数组,python是有array功能的,但是仅仅可以定义一维数组,并不能定义多维数组,而numpy库提供了多维数组的定义。
data_labels = ('艺术家', '实验员', '工程师', '推销员', '社会工作者', '记事员')
angles = np.linspace(0, 2 * np.pi, 6, endpoint=False)
# angles=np.linspace表示要获得一组等差的数列,使用方法如下:numpy.linspace(start, stop, num=50, endpoint=True),
# 表示以start为起点,stop为结束点,中间一共取num个点,可以不填num,若不填,则默认为50,且num为非负的值。endpoint=True,
# 则取的点中包括结束点,endpoint=False,则取的点中不包括结束点
# numpy.pi为numpy库中的Π值,所以这里的angles=np.linspace(0,2*np.pi,6,endpoint=False)表示以0为起始点,2Π为结束点,不包含结束点一共取6个点。
data = np.concatenate((data, [data[0]]))
angles = np.concatenate((angles, [angles[0]]))
print(angles * 180 / np.pi)
radar_labels = np.concatenate((radar_labels, [radar_labels[0]]))
print(radar_labels)
fig = plt.figure(facecolor="white")#将图形的背景颜色设置为白色,如果不写,默认是rc
plt.subplot(111, polar=True)#绘制一个极坐标图
plt.plot(angles, data, 'o-', linewidth=1, alpha=0.2)
# plt.plot(angles,data,‘o-’,linewidth=1,alpha=0.2)表示以angles为横轴数据,data为纵轴数据,’-0’表示实线实心圈标记。
# alpha表示透明度(是浮点值),值从0-1不等,0为透明,1为不透明。linewidth表示线宽,为浮点值。
plt.fill(angles, data, alpha=0.25)
plt.thetagrids(angles * 180 / np.pi, radar_labels)
# plt.thetagrids方法用于设置极坐标角度网格线显示,参数为所要显示网格线的角度值列表,
# 且默认显示0°、45°、90°、135°、180°、225°、270°、315°的网格线。
# plt.thetagrids(angles180/np.pi,radar_labels)即为在angles180/Π的角度上,[  0.  60. 120. 180. 240. 300.   0.]标上为radar_labels的标签。
plt.figtext(0.52, 0.95, '霍兰德人格分析', ha='center', size=20)
# plt.figtext(x,y, txt, size=12) 在figure中的任意位置添加文本,前面两个参数是指定位置。
# plt.figtext(0.52,0.95,‘霍兰德人格分析’,ha=‘center’,size=20),意思为在0.52,0.95的位置处添加’霍兰德人格分析’的文本,字大小为20
legend = plt.legend(data_labels, loc=(0.94, 0.80), labelspacing=0.1)#这一行用来设置图例
# plt.legend(*args, **kwargs),为一般形式plt.legend(data_labels,loc=(0.94,0.80),labelspacing=0.1)
# 表示将数据data_labels添加至位置为(0.94,0.80),图例条目之间的垂直间距为0.1。
plt.savefig('holland_radar.jpg')
plt.show()

这是北京理工大学嵩天老师的python编程基础课程中给出的一个案例:绘制霍兰德人格分析图,但是课程里给的源代码会报错,为此我们加了几行代码:

print(angles * 180 / np.pi)
radar_labels = np.concatenate((radar_labels, [radar_labels[0]]))
print(radar_labels)

在这里插入图片描述
不难看出,如果不对rader_labels进行扩展,那么他就和angles中的元素个数不相等,那么在thetagrids()中进行指定角度位置标注rader_labels就会报错,这样修改之后即可得到预期的效果。
在这里插入图片描述
欢迎一起讨论更多的方法~~

猜你喜欢

转载自blog.csdn.net/cyy0789/article/details/120342002