Python Matplotlib与Pyecharts绘制雷达图代码对比

纸上星河
纸上星河
发布时间:2026-10-28| 5人浏览过
原创

详细对比Python中使用Matplotlib与Pyecharts绘制雷达图的实现代码、核心原理、数据闭环处理逻辑及在交互报表与静态科研图表中的选型差异。

雷达图(Radar Chart)又称极坐标多维图或戴布拉图,适合用来展示实体在多个定性或定量指标上的综合表现。在Python生态中,绘制雷达图主要有两大流派:一是以底层绘图控制著称的 Matplotlib,它依托极坐标轴(Polar Projection)由开发者手动构建多边形;二是以Web前端引擎驱动的 Pyecharts,它通过声明式配置开箱即用支持悬停提示和动态渲染。本文将基于统一的评价数据集,从代码结构、实现机制、配置差异到场景选型展开全面对比,帮助开发者快速掌握两种工具的核心异同并准确技术定型。

Python Matplotlib与Pyecharts绘制雷达图代码对比
图1:Matplotlib 与 Pyecharts 技术范式与体系结构差异

一、基准对比数据设定

为了保证两套代码在横向对比时的公平性,我们设定一套工程师技能画像评估数据。包含6个技能维度,并对比“候选人A”与“岗位基准线”的得分情况:

  • 评估指标(6个维度):Python编程、算法基础、系统架构、工程规范、自动化运维、沟通协作
  • 候选人A得分:[88, 76, 85, 92, 70, 80]
  • 岗位基准要求:[80, 80, 75, 80, 80, 75]
  • 各维度最高满分:统一设定为 100 分

二、Matplotlib 绘制雷达图:极坐标下的几何构建

在 Matplotlib 中并没有现成的 plt.radar() 接口。实现雷达图的标准做法是将子图的投影方式设置为极坐标 polar=True,然后通过三角函数分配圆周角,将折线图的首尾端点手动连接成闭合多边形。

Python Matplotlib与Pyecharts绘制雷达图代码对比
图2:Matplotlib 极坐标雷达图的构建步骤与数据闭合必要性

Matplotlib 完整实现代码

import numpy as np
import matplotlib.pyplot as plt

# 1. 基础配置与中文字体支持
plt.rcParams['font.sans-serif'] = ['PingFang SC', 'Microsoft YaHei', 'SimHei', 'sans-serif']
plt.rcParams['axes.unicode_minus'] = False

# 2. 定义维度与数值
categories = ['Python编程', '算法基础', '系统架构', '工程规范', '自动化运维', '沟通协作']
values_a = [88, 76, 85, 92, 70, 80]
values_baseline = [80, 80, 75, 80, 80, 75]
num_vars = len(categories)

# 3. 计算每个维度的辐射角度(平均分割 2π)
angles = np.linspace(0, 2 * np.pi, num_vars, endpoint=False)

# 4. 手动完成闭环:将第一个点的值和角度追加到列表末尾
angles = np.concatenate((angles, [angles[0]]))
values_a = np.concatenate((values_a, [values_a[0]]))
values_baseline = np.concatenate((values_baseline, [values_baseline[0]]))

# 5. 创建极坐标子图
fig, ax = plt.subplots(figsize=(7, 7), subplot_kw=dict(polar=True))

# 设置极轴正方向:将 0 弧度置于正上方(12点钟方向),并顺时针排列
ax.set_theta_offset(np.pi / 2)
ax.set_theta_direction(-1)

# 设置维度文字标签与刻度
ax.set_thetagrids(np.degrees(angles[:-1]), categories, fontsize=11)
ax.set_ylim(0, 100)
ax.set_rgrids([20, 40, 60, 80, 100], labels=['20', '40', '60', '80', '100'], angle=0, color='#7F8C8D', fontsize=9)

# 6. 绘制数据折线与多边形填充
# 候选人A (主色调:鼠尾草绿)
ax.plot(angles, values_a, color='#879B88', linewidth=2, label='候选人A')
ax.fill(angles, values_a, color='#879B88', alpha=0.3)

# 岗位基准 (主色调:灰蓝虚线)
ax.plot(angles, values_baseline, color='#687D8D', linewidth=1.8, linestyle='--', label='岗位基准')
ax.fill(angles, values_baseline, color='#687D8D', alpha=0.15)

# 7. 标题与图例修饰
plt.title('候选人综合能力评估 (Matplotlib)', size=14, weight='bold', y=1.08)
plt.legend(loc='upper right', bbox_to_anchor=(1.25, 1.1), frameon=True)
plt.tight_layout()
plt.savefig('radar_matplotlib.png', dpi=300)
plt.show()
Matplotlib 核心操作要点:

1. 必须使用 angles[:-1] 传递刻度位置,因为闭合后 angles 有 7 个元素,但刻度标签只有 6 个;若传入 7 个会导致刻度重叠或抛出异常。
2. 极坐标默认 0 弧度在正右方(3点钟方向)且逆时针旋转。常规商业雷达图习惯将第 1 个指标置于顶部(12点钟),因此 ax.set_theta_offset(np.pi / 2) 和 ax.set_theta_direction(-1) 是保证排版符合直觉的关键操作。

三、Pyecharts 绘制雷达图:基于声明式的组件装配

与 Matplotlib 偏底层的坐标变换不同,Pyecharts 是百度 ECharts 的 Python 封装。它直接提供了雷达图专用的 Radar 类,开发者只需定义 schema(指标列表与每个维度的量程上限)和数据系列,多边形的闭合与坐标映射均由底层 JavaScript 引擎自动完成。

Pyecharts 完整实现代码

from pyecharts import options as opts
from pyecharts.charts import Radar

# 1. 定义维度规范与各维度量程上限 (schema)
schema_list = [
    opts.RadarShapeItem(name="Python编程", max_=100),
    opts.RadarShapeItem(name="算法基础", max_=100),
    opts.RadarShapeItem(name="系统架构", max_=100),
    opts.RadarShapeItem(name="工程规范", max_=100),
    opts.RadarShapeItem(name="自动化运维", max_=100),
    opts.RadarShapeItem(name="沟通协作", max_=100),
]

# 2. 准备数据集 (原始列表即可,无需手动补首项)
data_a = [[88, 76, 85, 92, 70, 80]]
data_baseline = [[80, 80, 75, 80, 80, 75]]

# 3. 初始化雷达图并配置结构
radar = (
    Radar(init_opts=opts.InitOpts(width="720px", height="520px"))
    .add_schema(
        schema=schema_list,
        shape="polygon",  # 雷达网格形状:支持 "polygon" (多边形) 或 "circle" (同心圆)
        splitarea_opt=opts.SplitAreaOpts(
            is_show=True, 
            areastyle_opts=opts.AreaStyleOpts(opacity=0.1)
        ),
        textstyle_opts=opts.TextStyleOpts(color="#2C3E50", font_size=12),
    )
    # 添加候选人A系列
    .add(
        series_name="候选人A",
        data=data_a,
        color="#879B88",
        areastyle_opts=opts.AreaStyleOpts(opacity=0.3),
        linestyle_opts=opts.LineStyleOpts(width=2),
    )
    # 添加基准对照系列
    .add(
        series_name="岗位基准",
        data=data_baseline,
        color="#687D8D",
        areastyle_opts=opts.AreaStyleOpts(opacity=0.15),
        linestyle_opts=opts.LineStyleOpts(width=1.8, type_="dashed"),
    )
    # 全局样式与交互提示配置
    .set_global_opts(
        title_opts=opts.TitleOpts(title="候选人综合能力评估 (Pyecharts)", pos_left="center"),
        legend_opts=opts.LegendOpts(pos_top="30px"),
        tooltip_opts=opts.TooltipOpts(trigger="item"),
    )
)

# 4. 渲染为独立 HTML 文件
radar.render("radar_pyecharts.html")
Python Matplotlib与Pyecharts绘制雷达图代码对比
图3:两种库底层数据流转与渲染流水线机制对比

四、关键维度对比与代码设计差异

在理解了具体代码与渲染管线后,我们可以将两者的开发差异归纳为以下四个核心维度:

对比维度 Matplotlib 实现方式 Pyecharts 实现方式 技术影响与开发体验
API 抽象层级 底层面向对象与极坐标投影 (polar=True) 高层图表类 (Radar) 声明式配置 Matplotlib需要显式操控坐标变换,Pyecharts开箱即用
数据闭环处理 必须手动拼接首元素 (np.concatenate) 自动闭合,传入原始指标数值即可 Matplotlib漏掉闭合会导致图形缺角,属于高频新手错误
指标量程定制 共享全局径向范围 (ax.set_ylim) 每个维度可在 RadarShapeItem 单独设 max_ 当各指标量纲不一致(如得分100分与时长60秒)时,Pyecharts更灵活
多系列绘制机制 多次调用 ax.plot() 与 ax.fill() 链式调用 .add() 传入多组系列数据 Pyecharts在多系列聚合与图例自动关联上代码更精简
交互与动画 静态无交互,需额外GUI框架或嵌入Notebook交互 原生支持鼠标悬停浮窗(Tooltip)、图例过滤点击与平滑补间动画 商业交付与管理层汇报中 Pyecharts 的视觉与交互体验更优
产物输出媒介 静态文件(PNG、PDF、SVG、EPS)或内联静态图 HTML独立网页、Jupyter交互挂件或通过Snapshot转图片 科研学术、LaTeX排版首选Matplotlib,网页大屏首选Pyecharts

五、选型决策指南与避坑建议

在实际工程项目中,选择哪个工具取决于图表最终的交付媒介、对交互性的要求以及维度的量纲特征。

Python Matplotlib与Pyecharts绘制雷达图代码对比
图4:Matplotlib 与 Pyecharts 雷达图选型决策树与落地建议

实际应用避坑提醒

  1. 雷达图维度数量控制:建议雷达图的评估维度保持在 4 到 8 个之间。少于 4 个指标时多边形趋于扁平,退化为普通线段;多于 8 个指标时轴线过于密集,文字标签极易重叠,此时水平条形图往往是更优表达。
  2. 不同量纲归一化:使用 Matplotlib 时,由于极轴半径尺度全局统一,如果各指标量纲不同(如一个指标是 0~1 的比率,另一个指标是 0~10000 的业务量),未做归一化会导致小数值指标缩在原点无法识别。而在 Pyecharts 中,可通过为每个指标显式声明 max_ 来缓解这一问题,但在严谨对比时仍推荐在输入数据前统一做 Min-Max 归一化。
  3. 透明度设置:当展示两个或多个实体时,多边形填充颜色务必设置合理的透明度(如 alpha=0.2 ~ 0.35),否则顶层的色块会完全遮挡底层轮廓,导致重叠区域的数据失真。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。