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

相关矩阵热力图未显示最后一行列的问题排查求助

解决热力图最后一行/列无法显示的问题

我之前也碰到过完全一样的情况!这种问题大多和坐标轴范围设置或者布局裁剪有关,咱们一步步来解决:

可能的成因

  1. matshow() 默认的坐标轴范围刚好卡到了最后一行/列的边缘,加上旋转后的标签占用空间,导致边缘元素被裁剪
  2. fig.tight_layout() 虽然用来自动调整布局,但有时候会过度压缩边缘空间,把最后一行/列的内容切掉
  3. 保存图片时没有考虑到标签的额外空间,只保存了主图区域

具体解决方案

方案1:手动修正坐标轴范围

在调用 ax.matshow() 之后,强制设置坐标轴的范围,确保整个相关矩阵都被包含:

df = df_[cols]
correlations = df.corr(method='spearman')
fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.matshow(correlations, vmin=-1, vmax=1)

# 新增:手动设置坐标轴范围,覆盖完整矩阵
ax.set_xlim(-0.5, len(cols)-0.5)
ax.set_ylim(len(cols)-0.5, -0.5)  # matshow的y轴是从上到下,所以要反转范围

ticks = np.arange(0, len(cols), 1)
ax.set_xticks(ticks)
ax.set_yticks(ticks)
ax.set_xticklabels(cols)
ax.set_yticklabels(cols)
plt.setp(ax.get_xticklabels(), rotation=90, horizontalalignment='right')
fig.tight_layout()
plt.savefig(folder_ranges+'rankcorr.png', bbox_inches='tight')  # 加上bbox_inches确保保存完整

方案2:替换tight_layout为更灵活的边距调整

如果 tight_layout() 效果不好,可以用 subplots_adjust 手动控制边距,给旋转后的x轴标签留出足够空间:

# 把 fig.tight_layout() 替换成下面这行
plt.subplots_adjust(bottom=0.25, right=0.95)  # bottom数值可以根据标签长度调整,越长设越大

方案3:用Seaborn时的适配

如果用Seaborn的heatmap,可以直接加上bbox_inches='tight'保存,或者调整布局:

sb.heatmap(correlations, xticklabels=cols, yticklabels=cols, vmin=-1, vmax=1)
plt.setp(plt.gca().get_xticklabels(), rotation=90, horizontalalignment='right')
plt.subplots_adjust(bottom=0.3)
plt.savefig(folder_ranges+'rankcorr.png', bbox_inches='tight')

快速验证技巧

先不要直接保存,用 plt.show() 查看窗口中的图是否完整:

  • 如果窗口里显示完整但保存后裁剪:问题出在保存环节,一定要加 bbox_inches='tight'
  • 如果窗口里就不完整:那就是坐标轴范围或者布局的问题,用方案1或2调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:07:28