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

Cartopy绘制区域地图时经度标签错误及显示范围异常问题求解

修复后的完整代码

import numpy as np
import cartopy.crs as ccrs
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
from matplotlib import pyplot as plt

lats = -31
latn =  31
lon1 = 119  
lon2 = 301   

plt.figure(figsize=(10,6))                            
proj = ccrs.PlateCarree(central_longitude=210)    
ax = plt.axes(projection=proj)
# 修复点1:set_extent的坐标参考系用默认的地理坐标系(中心0°的PlateCarree)
ax.set_extent([lon1, lon2, lats, latn], crs=ccrs.PlateCarree())
ax.coastlines()

# 修复点2:通过gridliner对象设置刻度和格式化,不要直接操作ax的x/yaxis
gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linestyle='--', alpha=0.5)
gl.xlocator = plt.FixedLocator(np.arange(120, 330, 30))
gl.ylocator = plt.FixedLocator(np.arange(-30, 40, 10))
gl.xformatter = LONGITUDE_FORMATTER
gl.yformatter = LATITUDE_FORMATTER
# 关闭顶部和右侧的冗余标签
gl.top_labels = False
gl.right_labels = False

plt.show()

问题修复说明

  • 范围显示全球的问题原因:set_extent方法传入的crs参数与经纬度数值的参考系不匹配。你给出的lon1、lon2是0-360°标准地理经度,对应的参考系是中心0°的PlateCarree(),而你之前传入的是中心210°的自定义投影坐标系,导致范围计算错误,最终显示全球区域。
  • 经度标签显示错误的问题原因:cartopy的投影坐标系下,直接对ax.xaxis、ax.yaxis设置刻度和格式化器不生效,所有的网格线、刻度标签配置都需要通过gridliner对象完成,才能自动适配投影转换后的坐标,正确显示120E、150E、180、150W等格式的标签。

内容的提问来源于stack exchange,提问作者Wayne Tsai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:54:02