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

如何解决Matplotlib中不同宽度热力图子图高度不一致的对齐问题?

解决热力图子图高度不一致、行不对齐的问题

问题根源在于imshow默认的aspect='equal'参数——这个设置会强制每个像素保持正方形比例。当三个子图列数不同时,相同行数的热力图会因宽度差异被自动调整高度以维持正方形像素,最终导致子图上下边缘不对齐。

解决方案:让热力图自适应子图尺寸

给每个imshow添加aspect='auto'参数,同时开启constrained_layout自动调整布局间距,即可实现子图高度统一对齐:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

rows = 4
first_cols = 5
second_cols = 1
third_cols = 3
first = np.random.randint(0,2,(rows, first_cols))
second = np.random.randint(0,2,(rows, second_cols))
third = np.random.randint(0,4,(rows, third_cols))

# 开启自动布局调整,避免标签重叠
fig = plt.figure(constrained_layout=True)
gs = GridSpec(1, first_cols + second_cols + third_cols)

ax1 = fig.add_subplot(gs[0, 0:first_cols])
ax2 = fig.add_subplot(gs[0, first_cols:first_cols+second_cols])
ax3 = fig.add_subplot(gs[0, first_cols+second_cols:])

# 取消像素正方形约束,让热力图填满子图容器
im1 = ax1.imshow(first, aspect='auto')
im2 = ax2.imshow(second, aspect='auto')
im3 = ax3.imshow(third, aspect='auto')

plt.show()

原理说明

  • aspect='auto'会取消像素的正方形强制限制,让热力图完全填充所在的子图区域,三个子图的高度因此统一对齐。
  • constrained_layout=True会自动处理子图间的间距,避免坐标轴标签、标题出现重叠问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:56:01