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
相关产品推荐
相关产品推荐

