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

解决Xarray分面网格绘图中色条重叠问题

解决Xarray分面网格图色条重叠问题

我之前也碰到过这个色条重叠的坑,给你几个靠谱的解决办法,结合你的代码来调整:

方案一:在add_colorbar中用cbar_kwargs调整间距和尺寸

直接在添加色条的时候,通过cbar_kwargs设置色条与子图的间距(pad)和缩放比例(shrink),给色条留出足够的空间,避免和子图重叠:

import xarray as xr
import cartopy.crs as ccrs
import matplotlib.pyplot as plt

USA_PROJ = ccrs.AlbersEqualArea(central_longitude=-97., central_latitude=38.)
g_simple = ds_by_month.t2m.plot(
    x='longitude', y='latitude',
    col='month', col_wrap=6,
    aspect=ds.dims['longitude'] / ds.dims['latitude'],
    subplot_kws=dict(projection=USA_PROJ),
    add_colorbar=False,
    transform=ccrs.PlateCarree()
)
# 调整色条的pad(和子图的间距)、shrink(缩小色条宽度)
g_simple.add_colorbar(orientation='horizontal', cbar_kwargs={'pad': 0.15, 'shrink': 0.8})

for ax in g_simple.axes.ravel():
    ax.coastlines()
    ax.set_extent([-121, -72, 22.5, 50])

plt.tight_layout()
plt.show()

方案二:直接在plot函数中指定色条参数(更省心)

不用单独调用add_colorbar,直接在t2m.plot()里通过cbar_kwargs配置色条,Xarray会自动帮你处理色条的布局,减少手动调整的麻烦:

import xarray as xr
import cartopy.crs as ccrs
import matplotlib.pyplot as plt

USA_PROJ = ccrs.AlbersEqualArea(central_longitude=-97., central_latitude=38.)
g_simple = ds_by_month.t2m.plot(
    x='longitude', y='latitude',
    col='month', col_wrap=6,
    aspect=ds.dims['longitude'] / ds.dims['latitude'],
    subplot_kws=dict(projection=USA_PROJ),
    transform=ccrs.PlateCarree(),
    # 直接在这里配置色条
    cbar_kwargs={'orientation': 'horizontal', 'pad': 0.1, 'shrink': 0.9}
)

for ax in g_simple.axes.ravel():
    ax.coastlines()
    ax.set_extent([-121, -72, 22.5, 50])

plt.tight_layout()
plt.show()

方案三:手动调整子图布局间距

如果上面的方法还不够,可以用plt.subplots_adjust手动修改底部的间距,给色条腾出空间:

import xarray as xr
import cartopy.crs as ccrs
import matplotlib.pyplot as plt

USA_PROJ = ccrs.AlbersEqualArea(central_longitude=-97., central_latitude=38.)
g_simple = ds_by_month.t2m.plot(
    x='longitude', y='latitude',
    col='month', col_wrap=6,
    aspect=ds.dims['longitude'] / ds.dims['latitude'],
    subplot_kws=dict(projection=USA_PROJ),
    add_colorbar=False,
    transform=ccrs.PlateCarree()
)
g_simple.add_colorbar(orientation='horizontal')

for ax in g_simple.axes.ravel():
    ax.coastlines()
    ax.set_extent([-121, -72, 22.5, 50])

# 调整底部间距,数值可以根据你的图大小微调
plt.subplots_adjust(bottom=0.2)
plt.show()

这些方法里,方案二是最推荐的,因为Xarray的绘图接口会自动协调子图和色条的布局,减少手动调试的工作量。你可以根据自己的图的实际大小,微调pad和shrink的数值,找到最合适的布局~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:08:36