如何将混淆矩阵的对角线设为黑色背景、非对角线设为白色背景
如何将混淆矩阵的对角线设为黑色背景、非对角线设为白色背景
嘿,我来帮你搞定这个混淆矩阵的样式自定义问题!你现在用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
相关产品推荐
相关产品推荐

