Matplotlib中使用append_axes追加轴时不继承Cartopy轴类型的方法
解决方案
此前出现
KeyError: 'map_projection'的原因是:append_axes默认会复用原轴的类,而Cartopy的GeoAxes初始化必须依赖投影参数,自动继承时未传入对应参数就会触发报错。
make_axes_locatable.append_axes 本身提供了 axes_class 参数,可手动指定追加轴的类型,无需继承原有Cartopy地理轴的属性。
- 操作逻辑:显式指定新增的色条轴为matplotlib基础
Axes类,即可避免继承GeoAxes的投影属性,完全适配色条的使用需求。 - 优势:完全保留原有Basemap使用习惯,生成的
cax位置、尺寸完全由divider基于原轴边界计算,自动限制在布局范围内,和其他使用divider.append_axes创建的子图可完美对齐,不会出现悬浮、被截断的问题。
完整可运行示例代码
import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1 import make_axes_locatable import cartopy.crs as ccrs # 初始化带Cartopy投影的主轴 ax = plt.axes(projection=ccrs.PlateCarree()) # 可正常添加地理元素,比如海岸线 ax.coastlines() # 初始化轴分割器 divider = make_axes_locatable(ax) # 追加右侧色条轴,指定axes_class为普通Axes cax = divider.append_axes( 'right', size='2.0%', pad=0.15, *axes_class=plt.Axes # 核心参数,强制使用普通二维轴,不继承原轴的投影类型* ) # 后续可正常传入cax生成色条,不会触发报错 # cf = ax.contourf(lon, lat, data, transform=ccrs.PlateCarree()) # plt.colorbar(cf, cax=cax)
内容的提问来源于stack exchange,提问作者user2403531
相关产品推荐
相关产品推荐

