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

如何让Seaborn混淆矩阵的颜色条显示百分比而非计数?

问题

现有代码可正常运行,但希望混淆矩阵的颜色条及颜色代表百分比而非原始计数,找不到指定颜色条对应数据的方法。

解决方案

核心是把热力图的颜色映射数据源换成归一化后的百分比矩阵,同时保留原有的单元格标注(计数+百分比)。

修改后的完整可运行代码:

import numpy as np
from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt

truth_labels = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0]
pred_labels = [1, 1, 1, 1, 0, 1, 1, 0, 0, 0]
TITLE_FONT_SIZE = {"size":"40"}
LABEL_FONT_SIZE = {"size":"40"}
LABEL_SIZE = 40

# 生成原始混淆矩阵
conf_matrix = confusion_matrix(pred_labels, truth_labels, labels=[1, 0])
# 生成计数文本
group_counts = ["{0:0.0f}".format(value) for value in conf_matrix.flatten()]
# 按实际标签列归一化计算百分比
group_normalized_percentages = (conf_matrix / np.sum(conf_matrix, axis=0, keepdims=True)).ravel()
group_normalized_percentages_text = ["{0:.2%}".format(value) for value in group_normalized_percentages]
# 组合单元格显示内容:计数+百分比
cell_labels = [f"{v1}\n{v2}" for v1, v2 in zip(group_counts, group_normalized_percentages_text)]
cell_labels = np.asarray(cell_labels).reshape(2, 2)

# 创建画布和轴对象(原代码缺失,补充以保证独立运行)
fig, ax = plt.subplots(figsize=(12, 10))
sns.set(font_scale=4.0)

# 关键:传入归一化后的百分比矩阵作为颜色映射依据,同时保留原标注
sns.heatmap(group_normalized_percentages.reshape(2,2), 
            annot=cell_labels, 
            cmap="Blues", 
            fmt="", 
            ax=ax,
            cbar_kws={'format': '%.2f%%'})  # 可选:让颜色条刻度显示为百分比

# 标题、轴标签等样式设置
title = "混淆矩阵\n"
ax.set_title(title, fontdict=TITLE_FONT_SIZE)
ax.set_xlabel("实际标签", fontdict=LABEL_FONT_SIZE)
ax.set_ylabel("预测标签", fontdict=LABEL_FONT_SIZE)
ax.tick_params(axis="both", which="major", labelsize=LABEL_SIZE)
ax.set_xticklabels(["1", "0"])
ax.set_yticklabels(["1", "0"], rotation=90, va="center")

plt.show()

改动说明

  • 颜色映射逻辑调整:sns.heatmap的第一个参数决定了颜色深浅对应的数值,换成百分比矩阵后,颜色就会随百分比变化,而不是原始计数。
  • 颜色条格式优化:cbar_kws参数可以自定义颜色条的显示格式,这里改成百分比后,颜色条的含义更直观。
  • 补全必要代码:原代码没有初始化ax对象,补充后代码可以直接运行,不需要额外依赖外部的轴对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 07:52:51