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

Matplotlib子图轴未对齐:如何对齐轴并消除底部空白?

解决Matplotlib子图轴对齐与底部空白问题

问题根源

imshow默认以**等宽高比(aspect='equal')**渲染图像,当两个图像高度不同时,子图默认的高度分配会导致轴无法对齐;强行设置固定figsize会因图像与画布比例不匹配,产生多余空白。

两种可行解决方案

方案1:按图像尺寸分配子图高度(推荐,保留图像比例)

获取两个数组的形状,计算高度比例,在创建子图时通过gridspec_kw参数分配对应高度,再配合匹配图像尺寸的figsize,既能对齐轴又无多余空白:

import matplotlib.pyplot as plt
import numpy as np

# 替换为你的实际数组
np_source = np.random.rand(10, 8)  # 示例:高度10,宽度8
achse = np.random.rand(3, 8)       # 示例:高度3,宽度8

# 获取图像的高宽
h1, w1 = np_source.shape
h2, w2 = achse.shape

# 创建子图时指定高度比例,同时设置适配的画布尺寸
fig, (ax1, ax2) = plt.subplots(
    2, 1,
    sharex=True,
    gridspec_kw={'height_ratios': [h1, h2]},  # 按图像高度分配子图高度
    figsize=(w1 * 0.8, (h1 + h2) * 0.8)       # 画布尺寸匹配图像总尺寸,系数可按需调整
)

plt.subplots_adjust(hspace=0.2)

# 绘制图像及设置轴属性
ax1.imshow(np_source, cmap='binary')
ax1.set_ylabel('Segmentiertes Bild')
ax1.xaxis.set_major_locator(plt.MultipleLocator(1))
ax1.yaxis.set_major_locator(plt.MultipleLocator(1))

ax2.imshow(achse, cmap='binary')
ax2.set_ylabel('Achse')
ax2.xaxis.set_major_locator(plt.MultipleLocator(1))
ax2.yaxis.set_major_locator(plt.MultipleLocator(1))

# 添加网格
ax1.grid(color='dimgrey', which="both", linewidth=1)
ax2.grid(color='dimgrey', which="both", linewidth=1)

plt.show()

方案2:自适应子图尺寸(简单,但会拉伸图像)

如果对图像原始比例要求不高,可以将imshow的aspect参数设为'auto',让图像自适应子图尺寸,轴会自动对齐:

# 修改两处imshow代码即可
ax1.imshow(np_source, cmap='binary', aspect='auto')
ax2.imshow(achse, cmap='binary', aspect='auto')

说明

  • 方案1严格保留图像原始比例,子图高度与图像高度匹配,完全解决轴对齐和空白问题;
  • 方案2操作简单,但会改变图像宽高比,适合对比例要求低的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:22:57