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

如何将混淆矩阵的对角线设为黑色背景、非对角线设为白色背景

如何将混淆矩阵的对角线设为黑色背景、非对角线设为白色背景

嘿,我来帮你搞定这个混淆矩阵的样式自定义问题!你现在用ConfusionMatrixDisplay生成的默认图肯定满足不了需求,咱们直接手动操控每个单元格的颜色就好,其实很简单,看我给你一步步拆解:

首先,你得先确保已经生成了混淆矩阵cm,然后在调用disp.plot()之后,我们直接修改每个单元格的背景色,同时调整文字颜色保证可读性(不然黑背景配黑字就完全看不见啦)。

直接上修改后的完整代码:

import matplotlib.pyplot as plt
from sklearn.metrics import ConfusionMatrixDisplay, confusion_matrix

# 先假设你已经有了真实标签y_true和预测标签y_pred,生成混淆矩阵
# y_true = ... 你的真实标签数据集
# y_pred = ... 你的模型预测结果
# cm = confusion_matrix(y_true, y_pred)

# 初始化混淆矩阵显示对象
disp = ConfusionMatrixDisplay(confusion_matrix=cm)
# 先绘制基础的混淆矩阵(我们后续会在这个基础上修改样式)
disp.plot()

# 获取混淆矩阵的类别数量
n_classes = cm.shape[0]

# 遍历每个单元格,自定义背景色和文字颜色
for i in range(n_classes):
    for j in range(n_classes):
        # 获取当前单元格的图形元素对象
        cell = disp.ax_.matshow.get_children()[i * n_classes + j]
        # 判断是否为对角线位置
        if i == j:
            # 对角线单元格设为黑色背景
            cell.set_facecolor('black')
            # 文字设为白色,保证在黑背景上清晰可见
            disp.text_[i][j].set_color('white')
        else:
            # 非对角线单元格设为白色背景
            cell.set_facecolor('white')
            # 文字设为黑色,保证数值可读性
            disp.text_[i][j].set_color('black')

# 最后渲染显示图形
plt.show()

关键细节解释:

  • disp.ax_.matshow.get_children():这个方法能精准拿到混淆矩阵里每个单元格的矩形元素,我们通过索引定位到每一个单元格。
  • 对角线判断i == j:精准锁定需要特殊样式的单元格,同时配套调整文字颜色,避免文字被背景完全覆盖。
  • 颜色自定义灵活度:要是你不想用纯黑纯白,直接把'black'和'white'换成你需要的颜色代码就行,比如'#2d2d2d'(深灰)或者'#f5f5f5'(浅灰)都可以。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 03:09:46