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

Matplotlib+Cartopy绘图时x/y轴标签不显示问题求助

问题原因

不需要额外声明新的ax变量,你当前创建的ax对象是完全正确的。x/y轴标签不显示是cartopy地图投影轴的默认机制导致的:当你调用ax.gridlines(draw_labels=True)开启经纬度刻度标注时,cartopy会默认把matplotlib原生坐标轴的标签渲染逻辑屏蔽,把轴边缘的位置留给自动生成的经纬度刻度文本,直接调用ax.set_xlabel()/ax.set_ylabel()的内容要么被挤到绘图区域外,要么被直接隐藏。

解决方法

你可以根据自己的需求选以下两种方案之一:

方案1:保留gridlines自动生成的经纬度刻度,同时显示自定义轴标签

把你原来写的ax.set_xlabel("Longitude")挪到gridlines相关配置的后面,通过labelpad参数给标签设置足够的外边距,把标签推到不与刻度文本重叠的位置即可正常显示:

# 放在gl.ylabel_style 配置之后
ax.set_xlabel("Longitude", labelpad=20, fontsize=11)
ax.set_ylabel("Latitude", labelpad=30, fontsize=11)

labelpad的数值可以根据你的实际出图效果微调,数值越大标签离绘图区越远。

方案2:关闭gridlines的自动刻度标注,使用matplotlib原生轴逻辑

如果你不需要cartopy自动格式化的经纬度刻度文本,可以直接关闭gridlines的标签绘制功能,之后轴标签的使用逻辑就和普通matplotlib图表完全一致:

# 修改gridlines初始化参数,关闭draw_labels
gl = ax.gridlines(zorder=5, color='black', alpha=0.5, draw_labels=False)
# 手动设置经纬度刻度
ax.set_xticks(range(100, 120, 5))
ax.set_yticks(range(0, 8, 2.5))
# 直接设置轴标签即可正常显示,不需要额外调整边距
ax.set_xlabel("Longitude", fontsize=11)
ax.set_ylabel("Latitude", fontsize=11)
额外代码问题修正

你代码中colorbar设置字体粗细的weight= BOLD存在语法问题,BOLD是字符串需要加引号,修改为weight='bold'即可避免运行报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:48:10