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

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()

核心改进点:

  1. 用suptitle替代title:plt.suptitle()是画布级别的总标题,调整pad参数只会改变它和子图区域的距离,完全不会干扰子图的季节标题
  2. 统一管理子图投影:通过subplot_kws给所有子图设置Cartopy投影,避免单独创建轴的混乱
  3. 遍历子图添加元素:利用xarray绘图返回的g对象获取所有子图轴,批量添加海岸线

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:05:17