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

如何调整imshow子图比例,保持Y轴恒定且X轴匹配数组宽度?

解决imshow绘制多数组时的自定义纵横比匹配问题

要实现子图X轴长度与数组水平尺寸成比例的需求,核心是结合子图宽度比例设置和imshow的aspect参数,以下是最直接的解决方案:

方法:利用subplots的width_ratios参数

因为所有数组的垂直尺寸相同(均为100),只需让子图的物理宽度比例等于数组的水平尺寸比例(200:300=2:3),再配合aspect='auto'让图像自适应子图尺寸即可,非整数比例也完全适用。

完整代码示例

import matplotlib.pyplot as plt
import numpy as np

# 创建测试数组
A = np.random.rand(100, 200)
B = np.random.rand(100, 300)

# 按数组水平维度比例设置子图宽度
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(10, 3), width_ratios=[200, 300])

# 绘制图像,aspect='auto'让图像填满子图,保证比例匹配
ax1.imshow(A, aspect='auto')
ax1.set_title('Array A (100×200)')

ax2.imshow(B, aspect='auto')
ax2.set_title('Array B (100×300)')

plt.tight_layout()
plt.show()

原理说明

  • width_ratios=[200, 300]直接指定两个子图的物理宽度比为2:3,完全匹配数组的水平尺寸比例;
  • aspect='auto'会让imshow忽略数据坐标的纵横比约束,自动拉伸图像填满整个子图,这样子图的物理尺寸比例就直接反映在图像的显示比例上;
  • 若需要固定aspect为shape[1]/shape[0](比如A的aspect=2,B的aspect=3),只需将aspect='auto'替换为对应的计算值,同时保持width_ratios的设置,效果一致:
    ax1.imshow(A, aspect=A.shape[1]/A.shape[0])
    ax2.imshow(B, aspect=B.shape[1]/B.shape[0])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:50:09