绘制特征雷达图主要有3个部分,首先是对现有数据进行清洗处理,然后对处理的数据进行计算,最后用计算的数据绘制特征雷达图。
这次我们主要的内容是绘制特征雷达图,所以数据进行清洗处理和数据进行计算就不进行说明了,主要说明用处理好的数据用python绘制特征雷达图。处理好的数据如下所示:
上标、下标、特征值和标准值都以确定,目前就用python来绘制特征雷达图。本次绘制特征雷达图用到的python库为matplotlib库,用pandas读入数据后,在同一个fig上绘制绘制上标、下标、特征值和标准值,最后输出结果,绘制特征雷达图的关键代码如下:
def plot_radar(newfile_dir,now_time,name):
data = pd.read_excel(newfile_dir)
kinds = data.iloc[:, 0]
labels = data.iloc[:, 1:].columns
centers = pd.concat([data.iloc[:, 1:], data.iloc[:, 1]], axis=1)
centers = np.array(centers)
n = len(labels)
angles = np.linspace(0, 2 * np.pi, n, endpoint=False)
angles = np.concatenate((angles, [angles[0]]))
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
plt.rcParams['font.sans-serif'] = ['SimHei']
floor = np.floor(centers.min())
ceil = np.ceil(centers.max())
for i in np.arange(floor, ceil + 0.5, 0.5):
ax.plot(angles, [i] * (n + 1), '--', lw=0.5, color='black')
for i in range(n):
ax.plot([angles[i], angles[i]], [floor, ceil], '--', lw=0.5, color='black')
ax.plot(angles, centers[0],'--' ,lw=2, label=kinds[0], color='r')
ax.plot(angles, centers[1], '--', lw=2, label=kinds[1], color='g')
ax.plot(angles, centers[2], lw=2, label=kinds[2], color='black')
ax.plot(angles, centers[3], lw=2, label=kinds[3], color='b')
font = FontProperties(fname=r"C:\Windows\Fonts\simhei.ttf", size=14)
ax.set_thetagrids(angles * 180 / np.pi, ['SO2', 'PM10', 'PM2.5', 'CO', 'NO2','SO2'], FontProperties=font)
plt.legend(loc='lower right', bbox_to_anchor=(1.2, 0.8))
ax.set_theta_zero_location('N')
ax.spines['polar'].set_visible(False)
ax.grid(False)
plt.tight_layout()
plt.title(now_time +':' +name,x=0,y=0.9,fontproperties=font,fontsize=18,color = 'r')
plt.savefig("image_file" + '/' + now_time + '.png')
plt.ylim(0, 20)
plt.grid(True)
matplotlib.use('Agg')
最后绘制的某县2021年1月11日时间特征雷达图如下所示,