Python中为2×2子图加标题遇问题:pad选项干扰子图标题
解决2×2子图总标题pad调整影响子图标题的问题
你的代码存在几个关键问题,导致总标题和子图标题互相干扰:
- 重复创建绘图对象,造成轴管理混乱
- 用
plt.title()添加的是当前子图的标题,而非整个画布的总标题,调整pad自然会影响子图标题 - 单独创建的Cartopy轴没有和子图关联,海岸线无法正确显示在子图上
以下是修正后的代码,能彻底解决这个问题:
import xarray as xr import numpy as np import matplotlib.pyplot as plt import cartopy.crs as ccrs # 读取数据 Data = xr.open_dataset(in_file) precip_data = Data['pre'] # 筛选研究区域数据 NHNA = precip_data.sel( lon=np.arange(-128.715, -64.557, 0.5), lat=np.arange(24, 50, 0.5), method='nearest' ) # 时间范围筛选与季节平均计算 study_date = NHNA[935:1452] Seas_NHNA = study_date.groupby('time.season').mean('time') # 绘制子图,统一设置Cartopy投影 g = Seas_NHNA.plot.contourf( x='lon', y='lat', col='season', col_wrap=2, cmap='Blues', vmin=0, vmax=200, figsize=(11,7), # 给所有子图指定Cartopy投影 subplot_kws={'projection': ccrs.PlateCarree()} ) # 给每个子图添加海岸线 for ax in g.axes.flat: ax.coastlines() # 添加画布级总标题,pad仅控制总标题与子图的间距,不影响子图标题 plt.suptitle('Average Seasonal Precipiation Jan. 1979 - Dec. 2021', pad=20) plt.show()
核心改进点:
- 用
suptitle替代title:plt.suptitle()是画布级别的总标题,调整pad参数只会改变它和子图区域的距离,完全不会干扰子图的季节标题 - 统一管理子图投影:通过
subplot_kws给所有子图设置Cartopy投影,避免单独创建轴的混乱 - 遍历子图添加元素:利用xarray绘图返回的
g对象获取所有子图轴,批量添加海岸线
内容的提问来源于stack exchange,提问作者cluelesscoder
相关产品推荐
相关产品推荐

