更换Mercator投影后Cartopy无法绘制海岸线的问题咨询
问题描述
我尝试绘制地中海北部区域的海岸线,使用ccrs.PlateCarree投影的脚本可正常运行并生成带海岸线的图像:
import matplotlib.pyplot as plt import cartopy.crs as ccrs from sys import exit as sys_exit def main(): plt.figure(dpi=600) ax = plt.axes(projection=ccrs.PlateCarree()) lon1, lon2, lat1, lat2 = 12., 16., 43.3, 46. ax.set_extent([lon1, lon2, lat1, lat2], crs=ccrs.PlateCarree()) ax.coastlines() plt.savefig('test.pdf') plt.close() return 0 if __name__ == '__main__': sys_exit(main())
但将投影替换为ccrs.Mercator后(如下脚本),生成的图像为空白,请问我哪里操作错误?
import matplotlib.pyplot as plt import cartopy.crs as ccrs from sys import exit as sys_exit def main(): plt.figure(dpi=600) ax = plt.axes(projection=ccrs.Mercator()) lon1, lon2, lat1, lat2 = 12., 16., 43.3, 46. ax.set_extent([lon1, lon2, lat1, lat2], crs=ccrs.Mercator()) ax.coastlines() plt.savefig('test.pdf') plt.close() return 0 if __name__ == '__main__': sys_exit(main())
问题解决
错误出在ax.set_extent的crs参数设置上。你传入的边界值(12.,16.,43.3,46.)是地理经纬度坐标,对应的投影是ccrs.PlateCarree(),而非ccrs.Mercator()。
set_extent方法的第二个crs参数,作用是声明输入的边界坐标所属的投影系统,不是当前轴使用的投影系统。当你错误地用Mercator作为这个参数时,Cartopy会把这些经纬度数值当作Mercator投影下的坐标值解析,导致视野定位到了完全无关的区域,所以图像显示空白。
修改后的正确代码如下:
import matplotlib.pyplot as plt import cartopy.crs as ccrs from sys import exit as sys_exit def main(): plt.figure(dpi=600) ax = plt.axes(projection=ccrs.Mercator()) lon1, lon2, lat1, lat2 = 12., 16., 43.3, 46. # 输入的是经纬度坐标,因此crs设为PlateCarree ax.set_extent([lon1, lon2, lat1, lat2], crs=ccrs.PlateCarree()) ax.coastlines() plt.savefig('test.pdf') plt.close() return 0 if __name__ == '__main__': sys_exit(main())
内容的提问来源于stack exchange,提问作者SteP
相关产品推荐
相关产品推荐

