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

混淆矩阵热力图第二行数值缺失问题咨询

混淆矩阵热力图第二行数值缺失问题咨询

我之前也碰到过一模一样的情况,结合你给出的环境和代码来看,这个问题大概率是Matplotlib 3.8.0与Seaborn 0.12.2的兼容性小bug,再加上你设置的画布尺寸太小,在Jupyter Notebook渲染时导致了第二行的标注被截断或挤压得无法显示。下面给你几个亲测有效的解决方法:

1. 放大画布尺寸并自动调整布局

你当前设置的figsize=(3, 3)实在太小了,单元格空间不足以容纳标注文字,直接调整画布尺寸并加上自动布局:

plt.figure(figsize=(6, 6), dpi=150) # 放大尺寸,同时保证清晰度
# 中间代码不变...
plt.tight_layout() # 自动调整元素位置,避免重叠
plt.show()

2. 手动控制标注文字大小

通过annot_kws参数设置标注的字体大小,防止文字超出单元格范围:

ax = sns.heatmap(conf_matrix, annot=True, fmt='d', annot_kws={"size": 12}) # 新增annot_kws控制标注大小

3. 切换Jupyter的Matplotlib渲染后端

有时候Jupyter的默认渲染后端对小尺寸图的支持有问题,在代码开头加上:

%matplotlib inline

强制使用inline渲染模式,很多时候能解决这类显示截断的问题。

4. 降级Matplotlib版本(终极方案)

如果上面的方法都没用,那就是Matplotlib 3.8.0的新特性和Seaborn 0.12.2的适配问题了,降级到更稳定的3.7.3版本:

pip install matplotlib==3.7.3 --upgrade

完整可运行的修改后代码

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

# 你的混淆矩阵数据
conf_matrix = [[122, 27], [40, 42]]

plt.figure(figsize=(6, 6), dpi=150)
sns.set(font_scale=1.1)

# 调整标注大小,确保能显示
ax = sns.heatmap(conf_matrix, annot=True, fmt='d', annot_kws={"size": 12}, cmap='Blues')

# 轴标签和刻度设置不变
ax.set_xlabel("Predicted Diagnosis", fontsize=14, labelpad=20)
ax.xaxis.set_ticklabels(['Negative', 'Positive'])

ax.set_ylabel("Actual Diagnosis", fontsize=14, labelpad=20)
ax.yaxis.set_ticklabels(['Negative', 'Positive'])

ax.set_title("Confusion Matrix for the Diabetes Detection Model", fontsize=14, pad=20)

plt.tight_layout()
plt.show()

我当时遇到这个问题就是用前两个方法解决的,你可以先从调整画布尺寸开始试,应该就能看到第二行的40和42了!

备注:内容来源于stack exchange,提问作者Edvonaldo Horacio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 08:28:10