Python如何制作雷达图
简介
雷达图又被称为蜘蛛图或极坐标图,它以一个原点为中心,通过多个等角度的放射线表示多个变量的数值,常用于多指标的比较和分析。Python提供了多个绘图库,如Matplotlib和Plotly,可以方便地制作出各种类型的雷达图。
1. Matplotlib绘制雷达图
Matplotlib是Python中常用的绘图库之一,它提供了丰富的绘图功能,包括绘制雷达图。
1.1 安装Matplotlib
在开始制作雷达图之前,需要先安装Matplotlib库。可以通过以下命令在终端或命令提示符中进行安装:
pip install matplotlib
1.2 示例:绘制基本雷达图
下面是一个简单的示例,展示如何使用Matplotlib绘制一个基本的雷达图。首先,导入需要的库:
import numpy as np
import matplotlib.pyplot as plt
然后,定义要绘制的数据。假设有5个指标,每个指标的取值范围为0到100,我们可以用一个列表表示:
labels = ['指标1', '指标2', '指标3', '指标4', '指标5']
values = [80, 65, 90, 75, 85]
接下来,计算出每个指标在雷达图上的角度,并将角度转换为弧度:
angles = np.linspace(0, 2 * np.pi, len(labels), endpoint=False).tolist()
angles += angles[:1] # 闭合图形
然后,初始化图形并设置图像的大小:
fig = plt.figure(figsize=(6, 6))
接着,创建一个极坐标子图:
ax = fig.add_subplot(111, polar=True)
然后,绘制雷达图的轴线:
ax.plot(angles, values, 'o-', linewidth=2)
ax.fill(angles, values, alpha=0.25)
接下来,设置雷达图的标签:
ax.set_thetagrids(np.degrees(angles[:-1]), labels)
最后,显示雷达图:
plt.show()
运行上述代码,即可得到绘制的雷达图。
1.3 自定义雷达图样式
在Matplotlib中,我们可以通过设置不同的参数来自定义雷达图的样式。以下是一些常用的自定义方法:
- linestyle:设置线条的样式,如’-‘表示实线,’–‘表示虚线等。
- linewidth:设置线条的宽度。
- marker:设置数据点的标记样式,如’o’表示圆圈,’s’表示正方形等。
- markersize:设置数据点的大小。
- color:设置线条和数据点的颜色。
- alpha:设置线条和数据点的透明度。
- label:设置线条和数据点的标签。
下面是一个完整的示例代码,展示如何自定义雷达图的样式:
import numpy as np
import matplotlib.pyplot as plt
labels = ['指标1', '指标2', '指标3', '指标4', '指标5']
values = [80, 65, 90, 75, 85]
angles = np.linspace(0, 2 * np.pi, len(labels), endpoint=False).tolist()
angles += angles[:1] # 闭合图形
fig = plt.figure(figsize=(6, 6))
ax = fig.add_subplot(111, polar=True)
ax.plot(angles, values, linestyle='-', linewidth=2, marker='o', markersize=5, color='r', alpha=0.8, label='数据')
ax.fill(angles, values, alpha=0.25)
ax.set_thetagrids(np.degrees(angles[:-1]), labels)
plt.legend()
plt.show()
运行上述代码,可以看到绘制的雷达图具有自定义的样式。
2. Plotly绘制雷达图
Plotly是一个交互式数据可视化库,它可以生成基于Web的图表,包括雷达图。与Matplotlib不同,Plotly可以在Jupyter Notebook等环境中以交互方式显示图表。
2.1 安装Plotly
在开始制作雷达图之前,需要先安装Plotly库。可以通过以下命令在终端或命令提示符中进行安装:
pip install plotly
2.2 示例:绘制基本雷达图
下面是一个简单的示例,展示如何使用Plotly绘制一个基本的雷达图。首先,导入需要的库:
import plotly.graph_objs as go
import plotly.offline as offline
然后,定义要绘制的数据。假设有5个指标,每个指标的取值范围为0到100,我们可以用一个列表表示:
labels = ['指标1', '指标2', '指标3', '指标4', '指标5']
values = [80, 65, 90, 75, 85]
接下来,创建一个雷达图的数据对象:
data = [
go.Scatterpolar(
r=values,
theta=labels,
fill='toself',
)
]
然后,创建一个布局对象:
layout = go.Layout(
polar=dict(
radialaxis=dict(
visible=True,
range=[0, 100],
)
),
showlegend=False
)
最后,使用offline.plot
方法显示雷达图:
offline.plot(dict(data=data, layout=layout), filename='radar_chart.html')
运行上述代码,可以输出一个HTML文件,其中包含绘制的雷达图。
2.3 自定义雷达图样式
在Plotly中,我们可以通过设置不同的参数来自定义雷达图的样式。以下是一些常用的自定义方法:
- mode:设置数据点的连接方式,如’markers’表示仅显示数据点,’lines’表示仅显示线条,’lines+markers’表示同时显示数据点和线条等。
- fill:设置雷达图的填充方式,如’toself’表示自动补充成闭合图形,’none’表示不填充等。
- line:设置线条的样式,如颜色、宽度等。
- marker:设置数据点的样式,如颜色、大小等。
以下是一个完整的示例代码,展示如何自定义雷达图的样式:
import plotly.graph_objs as go
import plotly.offline as offline
labels = ['指标1', '指标2', '指标3', '指标4', '指标5']
values = [80, 65, 90, 75, 85]
data = [
go.Scatterpolar(
r=values,
theta=labels,
fill='toself',
mode='markers',
marker=dict(
color='red',
size=10,
symbol='square'
),
line=dict(
color='blue',
width=2
)
)
]
layout = go.Layout(
polar=dict(
radialaxis=dict(
visible=True,
range=[0, 100],
)
),
showlegend=False
)
offline.plot(dict(data=data, layout=layout), filename='radar_chart.html')
运行上述代码,可以看到绘制的雷达图具有自定义的样式。
结论
本文介绍了如何使用Python中的Matplotlib和Plotly库来制作雷达图。通过这两个库,可以根据自己的需求绘制出各种类型的雷达图,用于多指标的比较和分析。