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

Python中如何使用imshow()在单行内并排绘制两幅子图

matplotlib 同排并排绘制两幅imshow图像实现方案

提前创建1行2列的子图网格,把两幅图的绘图逻辑分别绑定到对应子图轴对象即可实现并排展示,imshow()原生兼容子图模式,不存在适配问题。

修改后可直接运行的代码

import matplotlib.pyplot as plt

# 原有数据预处理逻辑无需改动
wvcount3D = fanibl['IMG_WV'][:]
wvcount3D.shape
wvcount = np.squeeze(wvcount3D)
wvcount.shape

# 创建1行2列的子图布局,可通过figsize调整整体画布宽高,避免内容挤压
fig, (ax_global, ax_asia) = plt.subplots(nrows=1, ncols=2, figsize=(14, 6))

# 绘制第一幅全球水汽分布图
im_global = ax_global.imshow(wvcount, vmin=800, vmax=975)
ax_global.set_title("Global 2D plot for Water Vapor Count for Fani before landfall")
fig.colorbar(im_global, ax=ax_global)
ax_global.grid()

# 绘制第二幅亚洲区域裁剪图
im_asia = ax_asia.imshow(wvcount, vmin=800, vmax=975)
ax_asia.set_title("Asia-specific plot for Water Vapor Count for Fani before landfall")
ax_asia.axis([300, 1000, 200, 700])
fig.colorbar(im_asia, ax=ax_asia)
ax_asia.grid()

# 自动调整子图间距,避免标题、色条、坐标轴标签重叠
plt.tight_layout()
plt.show()

关键改动说明

  • 原代码两次独立调用plt.show(),每次都会生成新的独立画布,自然会垂直排列成两列。改用plt.subplots()提前创建好同一画布上的两个并排轴对象后,所有绘图操作都在同一画布内完成
  • 子图模式下不要直接调用plt.title()、plt.grid()这类全局pyplot接口,要调用对应轴对象的方法:ax.set_title()、ax.grid()、ax.axis(),避免操作错绘图区域
  • 给子图添加色条时必须传入ax=对应子图对象参数,否则色条会默认占用整列空间,打乱整体布局
  • 最后调用plt.tight_layout()可以自动适配所有元素的位置,不需要手动调整边距参数,如果觉得图像过窄,直接调大subplots()中figsize的宽度数值即可

原单列排布的效果参考:
当前单列排布的输出效果


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:36:25