使用Cartopy Mercator投影绘制散点图仅显示空地图的问题
Mercator投影下散点图不显示的问题解决
问题现象
使用PlateCarree投影时,地图和散点数据能正常显示;切换为Mercator投影后,仅显示空白地图,无数据点。
问题原因
set_extent传入的经纬度范围属于地理坐标系(PlateCarree),但错误指定了crs=ccrs.Mercator(),导致地图范围计算偏差。- 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
相关产品推荐
相关产品推荐

