Cartopy AzimuthalEquidistant 投影:放大区域和海岸线

Cartopy AzimuthalEquidistant projection: zooming into a region and coastlines

我正在尝试使用 cartopy 在 AzimuthalEquidistant 投影上绘制一些数据。但是,它给了我几个问题。首先,此类投影不再显示海岸线。不确定这是我的代码还是 Cartopy 问题。我还注意到,如果我在 pcolormesh 命令中使用 ccrs.PlateCarree() 变换,那么海岸线确实会显示,但我的数据可能是错误的投影类型?

其次,如果轴边界在绘制数据后是圆形的,是否可以使用 set_extent 或类似的函数来做到这一点? 下面的代码应该重现问题,圆圈显示了我希望寄宿生的样子。

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

clat = 55.0
clon = -8.0
lons = np.arange(clon-15,clon+16,0.5)
lats = np.arange(clat-15,clat+16,0.5)
d = np.random.rand(lons.shape[0],lats.shape[0])

trans = ccrs.AzimuthalEquidistant(central_latitude=clat, central_longitude=clon)

ax = plt.axes(projection=trans)
ax.coastlines(resolution='10m')

CB=ax.pcolormesh(lons-0.25, lats-0.25, d.T, 
                 cmap=plt.cm.viridis, alpha=0.5,
                 transform=trans)#ccrs.PlateCarree())

p1 = mpatches.Circle((clon,clat), radius=15, color='k', lw=5, fill=False,
                     transform=trans)
ax.add_patch(p1)

如果您绘制的数据在 latitude/longitude 坐标中,那么 transform 关键字的正确值确实是 ccrs.PlateCarree()。这是新用户的常见陷阱。 transform 参数告诉 cartopy 您的数据所在的坐标,并且完全独立于您要绘制的 projection

要使绘图呈圆形,您需要自己设置边界。 Cartopy 文档有几个这样的例子:http://scitools.org.uk/cartopy/docs/latest/examples/always_circular_stereo.html and http://scitools.org.uk/cartopy/docs/latest/examples/star_shaped_boundary.html.