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

ax.set_xticks导致Cartopy+Matplotlib绘制的地形图异常收缩问题

问题原因
  • 这是Cartopy投影轴的常见使用误区:直接调用Matplotlib原生set_xticks()方法时,没有指定对应投影的坐标参考系(CRS),Matplotlib会默认使用画布像素坐标系解析你传入的经纬度刻度值,错误触发轴范围和宽高比重算,最终导致地图收缩。
  • y轴设置未触发问题属于巧合:你的纬度数值范围和画布高度的比例刚好匹配投影默认约束,没有触发重算逻辑,不代表操作本身是规范的。
解决方法

两种方案选其一即可:

方案1:给set_xticks补充crs参数(改动最小)

把你注释的刻度设置行改为如下格式,set_yticks也建议同步补充参数保证规范:

ax.set_xticks(np.linspace(Lonmin, Lonmax, 5), crs=ccrs.PlateCarree())
ax.set_yticks(np.linspace(Latmin, Latmax, 5), crs=ccrs.PlateCarree())

方案2:使用Cartopy官方推荐的gridlines设置刻度(更灵活)

完全删掉原生set_xticks/set_yticks/set_xlabel/set_ylabel相关代码,替换为gridlines对象配置刻度,不会破坏投影轴的比例约束,还支持更丰富的样式调整:
首先导入刻度定位器依赖:

import matplotlib.ticker as mticker

然后替换原来的ax.gridlines()行及后续刻度标签配置:

gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linestyle='--', alpha=0.7)
# 隐藏上、右两侧的冗余标签
gl.top_labels = False
gl.right_labels = False
# 设置自定义刻度
gl.xlocator = mticker.FixedLocator(np.linspace(Lonmin, Lonmax, 5))
gl.ylocator = mticker.FixedLocator(np.linspace(Latmin, Latmax, 5))
# 自定义标签样式
gl.xlabel_style = {'fontsize':15}
gl.ylabel_style = {'fontsize':15, 'rotation':0}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:45:02