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

使用Cartopy和Matplotlib绘制罗宾逊投影散点图时地图侧边被截断怎么办

问题原因

  • 你的经度数据采用的是0°360°的表示范围,而`ccrs.PlateCarree()`变换默认适配-180°180°的经度区间,超过180°的经度值没有被正确映射到对应西半球坐标,导致Cartopy自动计算的绘图范围异常,超出罗宾逊投影的边界出现截断。
  • 代码中没有手动指定地图的全局显示范围,Cartopy会根据传入的散点坐标自动适配范围,异常的经度值会导致适配结果出错。之前绘制等高线未出现该问题,大概率是之前使用的数据集经度已经是-180°~180°的格式,或是之前的代码中调用过全局范围设置接口。

解决方法

两步修改即可解决:

  1. 把0°360°范围的经度转换为-180°180°的标准格式
  2. 调用set_global()方法强制地图适配全球显示范围

修改后完整代码

import cartopy.crs as ccrs
import matplotlib.pyplot as plt

fig_scale = 2
fig = plt.figure(figsize=(4*fig_scale,3*fig_scale))
gs1 = plt.GridSpec(2, 1,height_ratios=[1, 0.05])
axes = plt.subplot(gs1[0,0], projection=ccrs.Robinson(central_longitude=0.0))

# 转换经度格式
lon = [x - 360 if x > 180 else x for x in lon]

mappab = plt.scatter(x=lon, y=lat,
            transform=ccrs.PlateCarree())

axes.coastlines(color='grey')
axes.gridlines()
# 强制设置全球显示范围
axes.set_global()

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:45:02