matplotlib Cartopy set_extent不工作

kyvafyod  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(186)

我正在尝试使用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)])
数字变成这样

ezykj2lf

ezykj2lf1#

看你的原始Map,它看起来像有一个接缝在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)])
xxhby3vn

xxhby3vn2#

add_extent通过给出与中心经度和纬度的偏差来工作。例如,如果中心经度为100 E,则
proj = ccrs.PlateCarree(central_longitude=100)
ax.add_extent([-50,50,-30,30],crs=proj)
将绘制东经50 E至150 E和北纬30 S至30 N的Map

相关问题