You need to enable JavaScript to run this app. Matplotlib中使用append_axes追加轴时不继承Cartopy轴类型的方法
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 19:45:04