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

