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

使用Cartopy Mercator投影绘制散点图仅显示空地图的问题

Mercator投影下散点图不显示的问题解决

问题现象

使用PlateCarree投影时,地图和散点数据能正常显示;切换为Mercator投影后,仅显示空白地图,无数据点。

问题原因

  1. set_extent传入的经纬度范围属于地理坐标系(PlateCarree),但错误指定了crs=ccrs.Mercator(),导致地图范围计算偏差。
  2. pandas的plot方法默认不会自动处理地理投影转换,未明确指定数据坐标系时,散点会被直接绘制在Mercator投影的坐标空间中,位置完全偏离可视范围。

修正后的代码

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

ax1 = plt.axes(projection=ccrs.Mercator())
ax1.add_feature(cf.BORDERS)
ax1.add_feature(cf.COASTLINE)
ax1.add_feature(cf.STATES)
# *关键修改1*:set_extent的crs指定为数据所在的PlateCarree,因为传入的是经纬度范围
ax1.set_extent([-5, 10, 41, 52], crs=ccrs.PlateCarree())
ax1.set_title('xxx', fontsize=18)
ax1.grid(b=True, alpha=0.5)

# *关键修改2*:添加transform参数,指定数据的坐标系为PlateCarree,让cartopy完成投影转换
obs200.plot(x="longitude", y="latitude", kind="scatter", c="mm", ax=ax1, cmap="jet",
            figsize=(18,20), title="xxx", transform=ccrs.PlateCarree())

核心说明

  • set_extent的crs参数定义的是输入范围的坐标系,你的范围是经纬度格式,必须用ccrs.PlateCarree(),cartopy会自动将这个范围转换为当前轴的Mercator投影可视范围。
  • transform参数用于声明散点数据的原始坐标系,让cartopy将经纬度数据转换到Mercator投影下,确保散点出现在正确位置。

内容的提问来源于stack exchange,提问作者Maximilian Bähr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:01:09