【问题标题】:Cartopy set_extent is not workingCartopy set_extent 不起作用
【发布时间】:2018-04-12 21:30:47
【问题描述】:

我正在尝试使用 Mateplotlib cartopy 制作下面的图。这是我正在使用的代码。

import cartopy.crs as ccrs

fig=plt.figure(figsize=(15,11))
ax = plt.subplot(111, projection=ccrs.PlateCarree(central_longitude=0))
mm =   ax.contourf(new_lon[:],lat_post,new_aa[0,:,:],transform=ccrs.PlateCarree(central_longitude=0))

ax.coastlines(resolution='10m');
ax.stock_img();
# the following two lines increaes the vertical distance between the title and the upper tick.
from matplotlib import rcParams
rcParams['axes.titlepad']=20
# drawing the longitude and latitude ticks.
gl = ax.gridlines(crs=ccrs.PlateCarree(central_longitude=0), draw_labels=True,linewidth=2, color='gray', alpha=0.5, linestyle='--')

然而,一旦我添加以下代码 set_extent ax.set_extent([np.min(new_lon),np.max(new_lon),np.min(lat_post) ,np.max(lat_post)])

人物变成了这样

【问题讨论】:

    标签: python python-2.7 matplotlib cartopy


    【解决方案1】:

    查看您的原始地图,看起来在 0 经度处有一条接缝,所以我猜 np.min(new_lon) 是 0,np.min(new_lon) 是 360。如果您将其与 set_extent() 一起使用,您会得到本初子午线处的一条非常窄的条带。我猜如果你这样做set_extent([-180, 180, ,np.min(lat_post), np.max(lat_post)] 会更好。

    在这种情况下,我能想到以编程方式实现它的唯一方法是:

    lon_bounds = new_lon[:]  # copy
    lon_bounds[lon_bounds > 180] -= 360
    ax.set_extent([np.min(lon_bounds), np.max(lon_bounds), np.min(lat_post), np.max(lat_post)])
    

    【讨论】:

    • 非常感谢。 set_extent([-180,180, np.min(lat_post), np.max(lat_post)] 解决了这个问题。另一方面,最后的代码给了我一个扭曲的形状。如您所料,new_lon 从 0 开始,到 358.40955 结束。我想知道为什么当 lon 从 0 开始并在 360 结束时 set_extent 有问题。
    • 问题在于,当您将范围设置为 0 和 360 时,当它将这些值转换为投影时,它们最终会彼此相邻。另一种选择,如果你知道你总是想要显示整个地球,你也可以这样做:ax.set_global()
    • 非常感谢。明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 2017-12-25
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 2016-05-30
    相关资源
    最近更新 更多