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

Cartopy绘制地图时散点图无法叠加显示的原因分析

故障原因

散点无法显示是两处代码配置错误共同导致的:

  • transform参数传参逻辑完全搞错了。Cartopy里传给绘图函数(比如这里的scatter)的transform参数,作用是告知库你输入的x、y坐标原本属于什么坐标系,和地图轴本身用的投影坐标系是两回事。你代码里写的散点坐标[10.,15.]是经度、[52.5,55.]是纬度,属于WGS84地理坐标系下的经纬度值,对应应该传transform=ccrs.PlateCarree();你错传成ccrs.EuroPP(),等于让库把这几个经纬度数值当成EuroPP投影下的平面坐标做转码,最终计算出来的点位位置完全错乱,根本不在预期区域。
  • 地图显示范围没覆盖到散点位置。你通过ax.set_extent([-16., 5., 49., 61.])设置的地图经度范围是西经16°到东经5°,但你写的散点经度是东经10°、15°,就算把transform参数改对,这两个点也在你设定的可视区域外面,照样显示不出来。
修正方案

把transform改成对应输入数据的坐标系,同时调整显示范围覆盖散点位置即可,修正后的可运行代码如下:

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

plt.figure(figsize=(10,10), dpi=150)
ax = plt.axes(projection=ccrs.EuroPP())

ax.coastlines(resolution='50m')
# 调整经度上限到16,覆盖东经10°、15°的散点位置
ax.set_extent([-16., 16., 49., 61.])

# 修正transform为经纬度对应的PlateCarree坐标系
plt.scatter([10.,15.], [52.5,55.], marker='o', s=100,
            transform=ccrs.PlateCarree(), color="red")

ax.gridlines(draw_labels=True)
plt.show()

如果你本来就不需要显示东经5°以东的区域,那不用改set_extent的范围,把散点的经度值调整到-16°到5°区间内,同时修正transform参数,也能正常看到散点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:30:22