#HollandRadarDraw.py import numpy as np import matplotlib.pyplot as plt import matplotlib import pandas as pd matplotlib.rcParams['font.family']="SimHei" df = pd.read_excel('tt.xls') k = df.shape[0] m = df.shape[1] # print(df.head(1)) # print('k等于',k) # print('m等于',m) #显示如下 # name chinese math english # 0 alic 98 99 45 # k等于 6 # m等于 4 #搞定雷达图上显示的维度,也就是取列名 radar_labels = df.columns.values[1:m] #print(radar_labels)#结果为['chinese' 'math' 'english'],符合要求 # data = df.iloc[0:k,1:m].values # print(data) #显示如下,一个元组是一个个案的数据,不是一个维度的数据,这是不符合要求的,因此要对df转置 # ['chinese' 'math' 'english'] # [[ 98 99 45] # [ 75 88 89] # [ 56 100 67] # [ 79 99 87] # [ 89 87 100] # [100 100 99]] data2 = pd.DataFrame(df.values.T, index=df.columns, columns=df.index) #print(data2) # #显示如下 # # 0 1 2 3 4 5 # # name alic tom duoli sally harry tata # # chinese 98 75 56 79 89 100 # # math 99 88 100 99 87 100 # # english 45 89 67 87 100 99 # # # # Process finished with exit code 0 data = data2.iloc[1:m+1,0:k+1].values #print(data) # [[98 75 56 79 89 100] # [99 88 100 99 87 100] # [45 89 67 87 100 99]] # # data_labels =('艺术家','实验员','工程师','推销员','社会工作者','dhf')#6个标签,对应6个数据 data_labels_1 = df['name'].values #print(data_labels_1)#['alic' 'tom' 'duoli' 'sally' 'harry' 'tata'] data_labels = tuple(data_labels_1) #print(data_labels)#('alic', 'tom', 'duoli', 'sally', 'harry', 'tata') #数据准备完毕,开始制图 angles = np.linspace(0, 2*np.pi, m-1, endpoint=False)#数据点的显示位置 #print(angles)#[0. 2.0943951 4.1887902] fig = plt.figure(facecolor = "white") plt.subplot(111, polar = True) plt.plot(angles, data,'o-',linewidth=1, alpha=0.2) plt.fill(angles, data, alpha=0.25) plt.thetagrids(angles*180/np.pi, 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='large')#绘制阶梯图 plt.grid(True) plt.savefig('holland_radar.jpg') plt.show()
03-09
1718
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)