Cartopy set_extent не работает

Я пытаюсь использовать 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_extentax.set_extent([np.min(new_lon),np.max(new_lon),np.min(lat_post) ,np.max(lat_post)])

Цифры становятся такими

2 ответа

Решение

Глядя на исходную карту, кажется, что на 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)])

add_extent работает, давая отклонения от центральной долготы и широты. Например, если центральная долгота равна 100° восточной долготы, то

proj = ccrs.PlateCarree(central_longitude=100)

ax.add_extent([-50,50,-30,30], crs=proj)

создаст карту для долготы от 50 до 150 восточной долготы и от 30 до 30 широты.

Другие вопросы по тегам