Matplotlib绘制2×2子图时如何下移左下角子图对齐避免标题重叠
2x2子图错位修复方法
布局错位的核心原因是其余子图附带的colorbar挤占了坐标轴空间,未配置colorbar的左下角子图按默认2x2网格位置排布,就会出现和其他子图不对齐、和上方子图标题重叠的问题。
方案1:统一网格布局(根源解决,推荐)
放弃逐个调用add_subplot的方式,用ImageGrid统一创建子图网格,自动对齐所有子图与colorbar尺寸,从根源避免错位:
- 导入依赖
from mpl_toolkits.axes_grid1 import ImageGrid
- 初始化2x2网格
grid = ImageGrid( fig, 111, nrows_ncols=(2, 2), axes_pad=0.4, # 调整该值增大/缩小子图间距,避免标题重叠 cbar_mode='edge', # 也可设为'each'为每个子图单独配置等大colorbar cbar_pad=0.15 ) # 按索引取用子图即可,左下角对应索引2,替换你原来的add_subplot代码 ax_bl = grid[2]
方案2:手动调整位置(适配现有代码)
如果不想重构现有绘图逻辑,可直接获取其他对齐子图的位置参数,强制给左下角子图设置相同的位置基准:
ax = fig.add_subplot(2,2,3,projection=proj) # 获取右下角同列已对齐子图的位置边界 br_pos = fig.axes[3].get_position() # 给左下角子图设置相同的x轴位置、宽高,y轴位置与右下角子图对齐 ax.set_position([br_pos.x0, br_pos.y0, br_pos.width, br_pos.height])
补充:如果单独给子图加colorbar,所有colorbar统一传入
fraction=0.046, pad=0.04参数,避免不同colorbar占比不一致导致新的错位。
内容的提问来源于stack exchange,提问作者Wx_Trader
相关产品推荐
相关产品推荐

