雷达图通过将多个维度的数据映射到同一个圆形的不同轴上,能够清晰展示单个或多个样本在多个特征上的表现差异,是多维数据对比场景下的常用可视化工具。Matplotlib作为Python生态中最基础的可视化库,提供了灵活的接口支持雷达图的绘制,下面详细介绍具体的实现方法。

雷达图绘制的核心原理
雷达图的本质是将极坐标下的多个轴均匀分布,每个轴代表一个特征维度,数据值映射到对应轴的半径上,最后将各点连接形成多边形。使用Matplotlib绘制雷达图的核心步骤包括:创建极坐标子图、设置特征轴标签、绘制数据折线、填充区域、添加图例和标题等。
单一数据组雷达图绘制
首先来看单个样本的多维特征雷达图绘制,假设我们要展示某款手机在性能、续航、拍照、外观、性价比5个维度的评分,具体实现代码如下:
import numpy as np
import matplotlib.pyplot as plt
# 设置中文显示
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams["axes.unicode_minus"] = False
# 特征维度
features = ["性能", "续航", "拍照", "外观", "性价比"]
# 对应评分,需要和特征数量一致
scores = [85, 90, 88, 92, 80]
# 闭合数据,雷达图需要将第一个点重复放到最后实现闭合
scores_closed = scores + [scores[0]]
# 角度计算,极坐标下每个特征对应的角度
angles = np.linspace(0, 2 * np.pi, len(features), endpoint=False).tolist()
angles_closed = angles + [angles[0]]
# 创建极坐标子图
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))
# 绘制雷达图折线
ax.plot(angles_closed, scores_closed, linewidth=2, label="手机A评分")
# 填充区域
ax.fill(angles_closed, scores_closed, alpha=0.25)
# 设置特征标签
ax.set_thetagrids(np.degrees(angles), features)
# 设置半径范围
ax.set_ylim(0, 100)
# 添加图例
ax.legend(loc="upper right")
# 添加标题
ax.set_title("手机A多维度评分雷达图", fontsize=14)
# 显示图表
plt.show()
多组数据对比雷达图绘制
实际场景中经常需要对比多个样本的多维特征,下面展示两款手机的多维度评分对比实现:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams["axes.unicode_minus"] = False
features = ["性能", "续航", "拍照", "外观", "性价比"]
# 手机A评分
scores_a = [85, 90, 88, 92, 80]
# 手机B评分
scores_b = [92, 82, 90, 85, 88]
# 闭合数据
scores_a_closed = scores_a + [scores_a[0]]
scores_b_closed = scores_b + [scores_b[0]]
angles = np.linspace(0, 2 * np.pi, len(features), endpoint=False).tolist()
angles_closed = angles + [angles[0]]
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))
# 绘制手机A雷达图
ax.plot(angles_closed, scores_a_closed, linewidth=2, linestyle="-", label="手机A")
ax.fill(angles_closed, scores_a_closed, alpha=0.2)
# 绘制手机B雷达图
ax.plot(angles_closed, scores_b_closed, linewidth=2, linestyle="--", label="手机B")
ax.fill(angles_closed, scores_b_closed, alpha=0.2)
ax.set_thetagrids(np.degrees(angles), features)
ax.set_ylim(0, 100)
ax.legend(loc="upper right")
ax.set_title("两款手机多维度评分对比雷达图", fontsize=14)
plt.show()
常见问题与优化技巧
- 中文显示问题:如果绘制时中文出现乱码,需要提前配置Matplotlib的字体参数,确保系统存在对应的中文字体。
- 数据闭合问题:雷达图需要形成闭合多边形,因此需要将第一个数据点的数值和角度重复添加到数组末尾。
- 样式调整:可以通过
linestyle参数设置折线样式,通过alpha参数调整填充区域的透明度,通过set_ylim统一坐标轴范围保证对比合理性。 - 维度数量适配:如果特征维度较多,可以适当调整极坐标的起始角度,避免标签重叠,通过
ax.set_theta_offset可以设置偏移角度。
通过上述方法,开发者可以快速使用Matplotlib实现不同场景下的雷达图绘制,满足多维数据特征对比的可视化需求,后续也可以结合其他可视化库进一步优化图表的交互性和美观度。
PythonMatplotlib雷达图多维数据可视化修改时间:2026-06-13 20:33:20