扫码关注【牵引小哥讲Python】,关注回复【资源】领取学习资源!
本期小哥讲解如何绘制雷达图。雷达图是一种表现多维数据的图表。在使用Matplotlib绘制雷达图时,需要注意以下几点:
- 绘图在极坐标系中进行
- 注意数据的闭合性,即:在每个数据的结尾添加初始数据
极坐标绘图官方指导链接:
小哥以两种产品特性得分为例,绘制雷达图。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.size'] = 16
mpl.rcParams['figure.figsize'] = (6,6)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
fig = plt.figure()
ax = fig.add_subplot(111, projection='polar') #创建极坐标的Axes对象
## 创建数据字典
p1={'经济性':60, '安全性':70, '舒适性':65, '可靠性':75, '互换性':80} #创建第一个的数据
p2={'经济性':70, '安全性':65, '舒适性':83, '可靠性':70, '互换性':67} #创建第二个的数据
## 提取数值信息和标签信息
data1=np.array([i for i in p1.values()]).astype(int)
data2=np.array([i for i in p2.values()]).astype(int)
label=np.array([j for j in p1.keys()])
theta = np.linspace(0, 2*np.pi, len(data1), endpoint=False) #计算区间角度
thetas = np.concatenate((theta, [theta[0]])) #添加第一个数据,实现闭合
data1 = np.concatenate((data1, [data1[0]])) #添加第一个数据,实现闭合
data2 = np.concatenate((data2, [data2[0]]))
ax.set_thetagrids(thetas*180/np.pi, label) #设置网格标签,单位转化成度数
ax.plot(thetas, data1, "o-", label='产品A')
ax.plot(thetas, data2, "o-", label='产品B')
ax.set_theta_zero_location('N') #设置极坐标0°位置
ax.set_rlim(0, 100) #设置显示的极径范围
ax.fill(thetas, data1, facecolor='g', alpha=0.2) #填充颜色
ax.fill(thetas, data2, facecolor='r', alpha=0.2)
ax.legend(loc=(0.9, 0.9))
ax.set_rlabel_position(40) #设置极径标签位置
ax.tick_params(pad=12, grid_color='k', grid_alpha=0.2, grid_linestyle=(0, (5, 5)))
plt.show()
plt.tight_layout()
雷达图很直观地展示了两种产品在不同性能上的差异。