混淆矩阵热力图第二行数值缺失问题咨询
混淆矩阵热力图第二行数值缺失问题咨询
我之前也碰到过一模一样的情况,结合你给出的环境和代码来看,这个问题大概率是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
相关产品推荐
相关产品推荐

