当前位置:首页>python>科研绘图 | 基于 Python 绘制多模型对比环形热图

科研绘图 | 基于 Python 绘制多模型对比环形热图

  • 2026-10-21 12:39:39
科研绘图 | 基于 Python 绘制多模型对比环形热图

一、引言

在多模型对比实验中,常见的矩形热图会随模型与指标数量增加而出现两类问题:

  1. 比较关系被坐标稀释:读者需要在行与列之间反复跳转,才能完成一次跨模型的指标对照。
  2. Train / Test 难以同位比较:训练集与测试集往往被安排在不同列或不同子图,破坏了同一模型在两种状态下的连续观察。

环形热图(circular heatmap)通过极坐标下的同心环与角度扇区,将"指标—模型—数据集—数值"四级信息压缩到同一图面内。该结构最早见于基因组学与生物信息学领域,后被广泛迁移至机器学习模型对比与多准则决策场景(单图和组图均有)。

本文介绍的实现热力图采用如下编码方式:

维度
矩形热图
环形热图(本文方案)
指标
纵轴标签
外圈色带 + 文字标题
模型
横轴标签
同心环(从外到内依次排列)
Train / Test
多列并列
同一扇区内的左右两半
数值
单元格色块
色块 + 单元格内数字
阅读路径
行列交叉
沿圆周逐扇区推进

设计原则:将比较关系的优先级置于坐标关系之上。


二、数据驱动的绘图逻辑

绘图逻辑的入口是结构化数据表,而非图形参数。数据Data.xlsx 需要 4 个字段:

字段名
含义
示例
Metric
指标名称
AUC、PR AUC、Accuracy
Model
模型名称
ADA、RF、SVM、DT、KNN、LR
Dataset
数据集划分
Train、Test
Value
指标取值
0.872
Metric_Order
扇区角度顺序
1, 2, 3, 4, 5, 6

加载阶段进行列完整性校验,避免下游绘图因缺列而中断:

required = {"Metric", "Model", "Dataset", "Value"}missing = required.difference(df.columns)if missing:raise ValueError(f"Missing required columns in Data.xlsx: {sorted(missing)}")

要点:数据结构的稳定性,是图形可复用性的前提。更换实验时仅需替换 Excel,绘图脚本无需调整。


三、环形结构的层次设计

环形热图的几何布局将信息组织为四个层级,按"指标 → 模型 → 数据集 → 数值"依次推进:

  • 指标层——最外圈标题色带,每个指标占据一段角度扇区,作为类别索引;
  • 模型层——中间若干同心环,每个模型占据一个径向环带,作为比较主体;
  • 数据集层——每个指标扇区被进一步拆分为左右两半,分别承载 Train 与 Test 两种状态;
  • 数值层——最小单元格内部呈现具体指标值,色块与数字同时编码。

几何参数

参数
含义
取值
SECTOR_SPAN
每个指标扇区角度跨度
52°
DATASET_GAP
Train / Test 之间的角度留白
0.7°
ROW_HEIGHT
单个模型环的径向厚度
0.050
ROW_GAP
相邻模型环之间的间隔
0.007
TITLE_INNER
 / TITLE_OUTER
外圈标题色带的内外半径
0.88 / 0.995
HOLE_RADIUS
中心白圆半径
0.34

绘制扇区与中心留白的核心代码:

wedge = Wedge((0, 0), title_outer, start, end, width=title_outer - title_inner)ax.add_patch(wedge)ax.add_patch(Circle((0, 0), hole_radius, facecolor="white", edgecolor="none"))

信息密度的分配依据

  • 指标作为类别索引,置于最外圈,色相一致、辨识度优先;
  • 模型作为比较主体,置于中间环带,径向空间充裕;
  • Train / Test 作为同一指标下的两种状态,在角度方向上左右分置;
  • 数值作为定量结果,落在最小单元格的中心。

要点:中心留白承担视觉锚点(visual anchor)职能,承载主标题与色标,使主图、标题、图例三者互不干扰。


四、空间约束

在环形布局中,注释信息需要在有限角度空间内保持稳定、清晰且不发生相互遮挡。

4.1 文字方向自适应

upright_rotation() 将任意极角下的文字旋转角度折回 [−90°, 90°] 区间,避免倒置:

defupright_rotation(angle_deg: float, offset: float = 0.0) -> float:    rot = angle_deg + offsetwhile rot <= -90:        rot += 180while rot > 90:        rot -= 180return rot

4.2 标签落点

标签类型
落点位置
半径
指标名
外圈色带中线
(TITLE_INNER + TITLE_OUTER) / 2
Train / Test
标题色带与数据环之间
TRAIN_TEST_R
模型名
数据环外侧的角度盲区
对应环中线
数值
每格角度中线
对应环中线

4.3 文字颜色自适应

text_color_for_rgba() 根据背景亮度切换前景色,采用 Rec. 709 相对亮度公式:

deftext_color_for_rgba(rgba) -> str:    r, g, b, _ = rgba    luminance = 0.2126 * r + 0.7152 * g + 0.0722 * breturn"white"if luminance < 0.55else"#3b3b3b"

要点:文字旋转的目标不是追随曲线,而是在不同角度位置上维持一致的辨识效率。


五、数值归一化与颜色映射

颜色在该图中承担定量映射(quantitative mapping)职能,而非结构表达职能。映射过程分两步:

norm = Normalize(vmin=0.65, vmax=1.0)       # 1. 归一化face = cmap(norm(value))                     # 2. 颜色查表color = text_color_for_rgba(face)            # 3. 字色适配
元素
作用
Normalize(vmin=0.65, vmax=1.0)
将 6 类不同指标统一压缩至同一色阶
cmap
将归一化值映射为具体颜色
text_color_for_rgba
跟随色块亮度切换字色,保证可读性

归一化区间的选择依据示例数据中各指标的取值范围。下界设为 0.65、上界设为 1.0,可同时容纳 AUC、Accuracy、F1 等典型机器学习评价指标的常见波动区间。

要点:颜色映射必须服从统一尺度,否则不同指标之间的比较将失去一致基准。


六、配色方案与 2×2 拼图

脚本内置 5 套配色方案,适配不同的发表语境。PALETTES 列表统一管理,新增配色仅需追加一行:

配色名
风格
适用场景
original
蓝灰 → 米白 → 橙红
论文正文、总结图
viridis
深紫 → 蓝 → 黄绿
通用科学配色
RdYlBu
红 → 黄 → 蓝
强调两端对比
RdBu_r
蓝 → 白 → 红
双向发散指标
coolwarm
冷蓝 → 中性 → 暖红
双向发散指标

七、结语

代码按"数据层 → 工具层 → 绘图层 → 入口层"四层组织,职责互不交叉:

  • 数据层:load_data 负责读取与校验 Data.xlsx;metric_order 依据 Metric_Order 列推导扇区角度顺序。
  • 工具层:upright_rotation 处理文字方向;text_color_for_rgba 处理字色对比度;model_rings 计算同心环的内外半径与中线;new_canvas 初始化极坐标画布。
  • 绘图层:draw_title_bands 绘制外圈标题色带与指标名;draw_sector(含 label_dataset、label_model、draw_cells)逐扇区绘制数据;draw_center 处理中心白圆、标题与色标。
  • 入口层:build_figure 串联上述函数生成单张图形;main 加载数据并遍历配色方案输出图像。

现在绘图代码都不支持免费获取了,欢迎加入小编科研绘图VIP群,298/年,所有科研绘图相关文章代码免费获取,联系小编,也可以更换为其他模型(比如RF、LGBM和XGBoost等定制修改)。涵盖机器学习模型(回归和分类)的shap分析、还有各种如皮尔逊分析等相关的图,以及期刊复现图,源代码直接复制或者打开就能绘图。同时进群赠送SHAP科研分析软件6.0(文本版)科研软件 | 基于机器学习+SHAP的科研分析软件(文本版,SHAP6.0)和 最优地理探测器软件最优地理探测器软件:从最优分类到交互探测的全流程可视化分析工具,且免费更新使用。VX:GISyanjiushengya

最新文章

随机文章