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

