You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Seaborn热力图混淆矩阵单元格同时标注数值与百分比

在Seaborn热力图混淆矩阵中同时显示绝对数值与百分比并屏蔽0值单元格

要实现同时显示绝对数值和百分比,你需要自定义标注文本数组,再传递给seaborn.heatmap的annot参数。结合你的需求,完整实现代码如下:

import seaborn as sns
import numpy as np

# 计算每行样本总数,用于行内占比计算
row_sums = pyArray_cf.sum(axis=1, keepdims=True)
# 生成百分比矩阵(转为百分比数值,方便格式化)
percentages = (pyArray_cf / row_sums) * 100

# 构建自定义标注文本:格式为「绝对数值 (百分比)」,0值单元格设为空
annot_text = np.array([
    [f"{val} ({pct:.1f}%)" if val != 0 else "" 
     for val, pct in zip(row, pct_row)] 
    for row, pct_row in zip(pyArray_cf, percentages)
])

# 绘制热力图
h_map = sns.heatmap(
    percentages / 100,  # 热力图颜色基于0-1范围的百分比,与原逻辑一致
    vmin=0, 
    vmax=1, 
    annot=annot_text,  # 使用自定义标注文本
    fmt='s',  # 指定标注为字符串格式,避免自动格式化
    cmap="Blues",
    ax=ax1,
    mask=pyArray_cf == 0,  # 保留原逻辑,屏蔽0值单元格
    xticklabels=x_axis_labels_1,
    yticklabels=y_axis_labels_1
)

关键说明

  1. 百分比计算:row_sums保证百分比为行内样本占比,和你原代码的逻辑完全匹配
  2. 自定义标注:通过列表推导式逐个生成单元格文本,0值单元格设为空,配合mask实现完全隐藏
  3. 格式控制:fmt='s'告诉Seaborn直接使用传入的字符串标注,不会额外做数值格式化
  4. 颜色映射:热力图底层数据仍用0-1范围的百分比,保证颜色深浅和原代码一致

内容的提问来源于stack exchange,提问作者dododabird

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:55:17