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
相关产品推荐
相关产品推荐

