如何在Python Matplotlib中制作多边形雷达(蜘蛛)图?
在数据可视化中,雷达图是一种常用的表达方式,它可以同时呈现多个变量之间的数据差异和综合数据趋势。Python中有很多可视化库可以实现雷达图,而Matplotlib则是其中一种常用的库。
本文将介绍如何使用Matplotlib制作多边形雷达图,让您的数据更加直观易懂。
准备工作
在开始制作雷达图之前,我们需要先准备好数据。这里我们以某公司不同部门2018年销售情况为例进行说明。
首先,我们需要创建一个列表,存储各个部门的销售数据。代码如下:
sales = [60, 75, 65, 80, 85, 70]
然后,我们需要确定各个维度的名称,以便在图表中呈现。我们选择以 “人力资源”、“财务”、“市场营销”、“产品研发”、“客户服务”、“销售” 为例。
接下来,我们需要计算出每个维度所对应的角度值。根据公式 angle = \frac{2\pi}{n} * i,其中 n为维度总数,i为当前维度序号,我们可以采用如下代码来计算:
import math
n = len(sales)
angles = [i * 2 * math.pi / n for i in range(n)]
绘制雷达图
我们已经准备好数据和角度值,可以开始制作雷达图了。具体步骤如下:
1. 创建子画布
因为雷达图需要以多边形的形式展现,所以我们需要创建一个子画布。代码如下:
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
2. 绘制多边形
接下来,我们需要以角度值为坐标,绘制一个多边形。代码如下:
angles.append(angles[0])
sales.append(sales[0])
ax.plot(angles, sales)
ax.fill(angles, sales, alpha=0.3)
可以看到,我们将角度和销售数据分别传递给plot()和fill()方法,从而绘制了一个表示不同部门销售情况的多边形。
3. 添加标签和网格线
为了让雷达图更加清晰易懂,我们需要添加标签和网格线。代码如下:
ax.set_thetagrids([a * 180 / math.pi for a in angles[:-1]], labels)
ax.grid(True)
这里,我们将角度转换成了角度制,方便展示。同时,我们调用了set_thetagrids()方法,添加了标签,并且调用了grid()方法,添加了网格线。
4. 添加数据点和数据线
为了更加明确地表达各个维度的销售情况,我们可以为每个点添加数据点和数据线。代码如下:
ax.plot(angles, sales, 'o', linewidth=2)
ax.plot(angles, sales, color='r', linewidth=2)
这里,我们调用了plot()方法两次,第一次绘制数据点,第二次绘制数据线。
5. 呈现图表
最后,我们只需要调用show()方法呈现图表即可。代码如下:
plt.show()
完整代码
综合以上步骤,我们得到了如下完整的Python代码:
import math
import matplotlib.pyplot as plt
sales = [60, 75, 65, 80, 85, 70]
labels = ["人力资源", "财务", "市场营销", "产品研发", "客户服务", "销售"]
n = len(sales)
angles = [i * 2 * math.pi / n for i in range(n)]
angles.append(angles[0])
sales.append(sales[0])
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
ax.plot(angles, sales)
ax.fill(angles, sales, alpha=0.3)
ax.set_thetagrids([a * 180 / math.pi for a in angles[:-1]], labels)
ax.grid(True)
ax.plot(angles, sales, 'o', linewidth=2)
ax.plot(angles, sales, color='r', linewidth=2)
plt.show()
结论
通过本文的介绍,我们学习了如何使用Matplotlib制作多边形雷达图。通过数据的绘制,我们可以更加清晰直观地表达各个维度之间的差异和趋势,为数据的分析提供了有力的支持。希望本文对您有所启发和帮助。