数据可视化之绘制雷达图

文摘   科技   2024-07-14 08:03   江苏  











01


引言



雷达图Radar Chart,又称蜘蛛图或网络图,是一种用于比较多个定量变量的图形方法。它是一种二维极坐标可视化示例。

本教程重点介绍如何在Python中创建雷达图,闲话少说,我们直接开始吧!



02


 导入基础依赖库


我们将使用 Matplotlib库来实现雷达图的可视化,并使用NumPy库实现多个数学运算。

import numpy as npimport matplotlib.pyplot as pltplt.style.use('ggplot')

请注意,上述代码中,我将matplotlib库中的样式设置为 ggplot,这样就可以设置自己喜欢的样式或使用默认样式。




03


  数据准备


接下来的示例中,我们将使用雷达图直观地显示 Alice 和 Bob 这两名学生在五个科目中的分数。科目和分数以列表形式提供,如下:

subjects=['PHY','CHEM','BIO','MATH', 'ECO']alice=[60,40,68,94,27]bob=[81,30,75,37,46]
在本例中,我们使用雷达图来显示上述5 个变量。因此,图表将有 5个极坐标轴。

圆内总角为 360 度(2pi 弧度)。每个轴之间的夹角为 72 度(360/5)

Matplotlib 使用以弧度为单位的角度来绘制极坐标图。我们可以使用 numpy中的 linespace 函数来获取角度,如下所示。

angles=np.linspace(0,2*np.pi,len(subjects), endpoint=False)print(angles)

结果如下:

[0. 1.25663706 2.51327412 3.76991118 5.02654825]
我们已经得到了每个变量的角度。然而,这只能生成一个圆的五分之四,我们必须在数组末尾添加第一个角,才能完整地描述这个圆。
angles=np.concatenate((angles,[angles[0]]))print(angles)

输出如下:

[0. 1.25663706 2.51327412 3.76991118 5.02654825 0.]

相应地,用于可视化的所有其他数组/列表也必须追加第一个值,以保持长度一致。

subjects.append(subjects[0])alice.append(alice[0])bob.append(bob[0])




04


  绘制雷达图


准备好了上述数据,接着我们来绘制雷达图,这里通过在 add_subplot 函数中设置 polar=True 并提供角度和数值作为 plot 函数的参数,可以绘制基本的雷达图。

fig=plt.figure(figsize=(6,6))ax=fig.add_subplot(polar=True)ax.plot(angles,alice)plt.show()

运行后,得到结果如下:





05


自定义雷达图


我们可以通过添加更多的信息来定制雷达图。

  • Line and Marker: 线条和标记样式可以通过在 plot 函数中提供参数来改变。在下面的代码中,线条和标记样式是通过使用位置参数来设置的,类似于matplotlib的折线图。线条颜色通过plot函数的 color 参数进行设置。
  • Fill the Plot Area:可以使用 fill 函数填充绘图区域,参数包括角度和数值。可以使用颜色和 alpha 参数设置颜色和不透明度。在比较多个实体时,最好使用对比色和较低的 alpha 值。
相应的可视化代码如下:
fig=plt.figure(figsize=(6,6))ax=fig.add_subplot(polar=True)#basic plotax.plot(angles,alice, 'o--', color='g', label='Alice')#fill plotax.fill(angles, alice, alpha=0.25, color='g')#Add labelsax.set_thetagrids(angles * 180/np.pi, subjects)
plt.grid(True)plt.tight_layout()plt.legend()plt.show()

运行结果如下:





06


绘制多个对象


最后,我们来到了本教程中令人期待的部分,即 "爱丽丝如何对抗鲍勃? 我们需要将爱丽丝和鲍勃的雷达图合并到同一个图表中,就可以回答这个问题。


代码如下:

fig=plt.figure(figsize=(6,6))ax=fig.add_subplot(111, polar=True)#Alice Plotax.plot(angles,alice, 'o-', color='g', linewidth=1, label='Alice')ax.fill(angles, alice, alpha=0.25, color='g')#Bob Plotax.plot(angles,bob, 'o-', color='orange', linewidth=1, label='Bob')ax.fill(angles, bob, alpha=0.25, color='orange')ax.set_thetagrids(angles * 180/np.pi, subjects)plt.grid(True)plt.tight_layout()plt.legend()plt.show()

运行后,得到结果如下:

通过雷达图,我们可以发现爱丽丝的数学成绩比鲍勃好很多。他们在生物和化学方面的表现不相上下。这就是雷达图的优点,当比较多个实体的多个变量时,它非常容易理解。





07


总结


本文重点介绍利用matplotlib库来绘制雷达图的方法,一般来说,雷达图适合比较 2-4 个实体和 3-10 个定量变量。实体或变量的数量越多,图表就越杂乱,难以理解。


您学废了吗?





代码链接:https://github.com/hashABCD/Publications/tree/main/Medium/Radar%20Chart




点击上方小卡片关注我




添加个人微信,进专属粉丝群!


AI算法之道
一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
 最新文章