使用Cartopy和Matplotlib绘制罗宾逊投影散点图时地图侧边被截断怎么办
问题原因
- 你的经度数据采用的是0°360°的表示范围,而`ccrs.PlateCarree()`变换默认适配-180°180°的经度区间,超过180°的经度值没有被正确映射到对应西半球坐标,导致Cartopy自动计算的绘图范围异常,超出罗宾逊投影的边界出现截断。
- 代码中没有手动指定地图的全局显示范围,Cartopy会根据传入的散点坐标自动适配范围,异常的经度值会导致适配结果出错。之前绘制等高线未出现该问题,大概率是之前使用的数据集经度已经是-180°~180°的格式,或是之前的代码中调用过全局范围设置接口。
解决方法
两步修改即可解决:
- 把0°360°范围的经度转换为-180°180°的标准格式
- 调用
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
相关产品推荐
相关产品推荐

