Python可视化 · Matplotlib · 雷达图 · 完整源码
普通雷达图在指标较多、系列较多时,往往容易出现信息拥挤、颜色混乱等问题。本文分享一套基于 Python 和 Matplotlib 的彩色分区环状雷达图代码:外圈用不同颜色区分指标,内部叠加多组雷达曲线,并支持从 CSV 文件读取数据、自动生成多个子图,适合科研绘图、项目汇报和数据分析展示。
一、最终效果
这套代码可以一次绘制多个雷达图面板。每个面板使用统一的指标顺序和量纲,不同数据系列以线条和半透明填充区分,外侧彩色扇区则帮助读者快速识别各项指标。
图一:彩色分区环状雷达图示例
示例中共有 6 个面板、12 个评价指标,每个面板包含 4 组数据。代码会根据面板数量自动安排为两列布局,因此不需要手动计算每张子图的位置。
二、这张图是怎样设计的?
1. 彩色外环对应不同指标
图的外圈被划分为多个扇区,每个扇区对应一个评价指标。相邻指标采用不同的柔和配色,既增强了视觉层次,也避免了传统雷达图中标签与网格混在一起的问题。
2. 多条雷达曲线展示组间差异
每个面板最多可以显示 4 组数据。不同系列使用独立的线条颜色、点标记和透明填充,适合比较不同地区、不同方案、不同时间或不同实验组之间的综合表现。
3. 多面板保持统一视觉尺度
所有子图共享同一套指标、颜色和径向刻度,便于横向比较。示例默认最大值为 1.10,径向参考值为 0.28、0.55、0.83 和 1.10,也可以根据自己的数据范围修改。
三、项目文件
下载源码后,可以看到以下几个文件:
radar_chart_from_csv.py 主程序radar_example_data.csv 示例数据run_radar_chart.bat Windows 一键运行脚本README.md 使用说明
其中,日常使用主要需要修改 CSV 数据文件。图形样式、颜色、刻度和输出清晰度,则可以在 Python 主程序中调整。
四、准备 CSV 数据
CSV 文件的前两列必须是panel和series。panel 表示子图名称,series 表示同一子图中的数据系列;从第三列开始,每一列就是一个雷达图指标。
panel,series,指标1,指标2,指标3,指标4P1,方案A,0.82,0.61,0.75,0.93P1,方案B,0.65,0.78,0.58,0.81P2,方案A,0.73,0.86,0.69,0.77P2,方案B,0.88,0.64,0.79,0.72
同一个 panel 可以占用多行,每一行代表一组 series。指标数量可以增加或减少,程序会根据 CSV 表头自动计算各指标在圆周上的位置。为了保证图形可读性,建议单个面板的数据系列不要过多。
五、Windows一键运行
如果使用 Windows,最简单的方法是双击run_radar_chart.bat。脚本会自动创建独立的 Python 虚拟环境,安装 NumPy 和 Matplotlib,并读取示例 CSV 生成图片。
第一次运行需要下载依赖,等待时间会稍长。运行完成后,文件夹中会生成 PNG 图片。之后再次运行时,不需要重复安装全部环境。
六、使用命令行运行
已经配置好 Python 环境的读者,也可以打开终端并执行:
pip install numpy matplotlibpython radar_chart_from_csv.py radar_example_data.csv radar_example_output.png
第一个参数是输入的 CSV 文件,第二个参数是输出图片名称。将示例数据替换为自己的数据后,再执行同一条命令即可。
七、关键绘图思路
1. 将各指标均匀分布在圆周上
angles = np.linspace(0, 2 * np.pi, num_categories, endpoint=False)closed_angles = np.concatenate([angles, angles[:1]])
每个指标对应一个角度。绘制封闭雷达曲线时,需要把第一个角度和第一个数值再次添加到数组末尾。
2. 用扇形补丁绘制彩色外环
wedge = Wedge( center=(0, 0), r=outer_radius, theta1=start_angle, theta2=end_angle, width=ring_width, facecolor=sector_color)ax.add_patch(wedge)
外环不是普通极坐标填充,而是由多个 Wedge 扇形对象组合而成。这样可以分别控制每个指标区域的颜色、宽度和边界。
3. 叠加曲线与半透明填充
ax.plot( closed_angles, closed_values, color=line_color, linewidth=2, marker=”o”)ax.fill( closed_angles, closed_values, color=line_color, alpha=0.08)
低透明度填充能够帮助读者观察各系列覆盖范围,又不会完全遮挡底部网格与其他曲线。
八、常用参数怎样修改?
如果希望做出自己的风格,可以重点修改主程序中的几类参数。首先是外环调色板,它决定各指标扇区的颜色;其次是曲线调色板,用于区分不同系列;还可以调整最大值、径向刻度、线宽、填充透明度、子图间距和输出 DPI。
推荐调整顺序先根据数据范围统一设置最大值和径向刻度,再确定每个面板保留多少条曲线,最后调整颜色、字号和图片尺寸。这样可以避免只追求配色,却降低数据可读性。
当前代码会把数值限制在 0 至 1.10 之间。如果自己的指标采用百分制、五分制或其他量纲,需要同步修改最大值和刻度设置,也可以先对原始数据进行标准化。
九、适合哪些场景?
这种图适合展示多个对象在同一组指标下的综合差异,例如城市评价、生态环境指数、模型性能比较、不同实验组特征、区域发展水平、产品能力矩阵或问卷维度分析。它的优势是视觉辨识度高、面板之间便于比较,但指标和系列过多时仍会显得拥挤,因此应根据发布载体适当精简。
十、使用时需要注意什么?
第一,不同面板最好使用相同的指标顺序和数值尺度,否则读者容易产生错误比较。第二,雷达图更适合观察整体轮廓,不适合承担非常精确的数值比较。第三,公众号图片会被压缩,建议导出高分辨率 PNG,并在手机预览中检查标签是否清晰。
完整源码获取
【关注公众号并回复“01雷达图”】
代码仅作为绘图方法示例,可根据数据特征和发布需求进一步调整。