выровняйте картографический сюжет 2D-карты с линейным сюжетом 1D - PullRequest
1 голос
/ 23 марта 2020

Мне нужно выровнять участок картографической 2D-карты с участком 1D-линии, используя следующий код:

import xarray as xr
import cartopy.crs as ccrs
import matplotlib.pyplot as plt


air = xr.tutorial.open_dataset('air_temperature').air[0]

fig = plt.figure(figsize=(14,5))

ax1 = fig.add_subplot(121,
                 projection=ccrs.PlateCarree(central_longitude=180))
air.plot.pcolormesh(ax=ax1,
               transform=ccrs.PlateCarree(),
               cbar_kwargs={'orientation':'horizontal'})
ax1.coastlines()
ax1.set_extent((air.lon[0], air.lon[-1], air.lat[-1], air.lat[0]),
               crs=ccrs.PlateCarree())

ax2 = fig.add_subplot(122)
air.mean('lon').plot(ax=ax2, y='lat')

plt.tight_layout()

Это дает график в виде: plot

Оба участка имеют одинаковый диапазон y (широта), и я ожидаю, что прямоугольники двух осей могут совпасть друг с другом. Есть ли простой способ сделать это?

1 Ответ

0 голосов
/ 22 апреля 2020

Я нашел хорошее решение от proplot :

import xarray as xr
import proplot as plot

air = xr.tutorial.open_dataset('air_temperature').air[0]

array = [
    [1, 1, 1, 2],
    [1, 1, 1, 2],
    [3, 3, 3, 0]
]

fig, ax = plot.subplots(array, proj={1:'pcarree'}, width=7)

air.plot(ax=ax[0], add_colorbar=False)
air.mean('lon').plot(ax=ax[1], y='lat', xincrease=True)
air.mean('lat').plot(ax=ax[2])

ax.format(abc=True, abcloc='l', abcstyle='(a)')

ax[0].format(lonlim=(air.lon[0], air.lon[-1]), latlim=(air.lat[0], air.lat[-1]),
             coast=True, labels=True, lonlines=20, latlines=10,
             title='temperature')
ax[1].set(title='zonal mean', xlim=[240, 300], ylabel=None,
          yticks=[20, 30, 40, 50, 60, 70],
          yticklabels=['20°N','30°N','40°N','50°N','60°N','70°N'])
ax[2].set(title='meridional mean', ylim=[260, 285],
          ylabel=None, xlabel='longitude',
          xticklabels=['160°W','140°W','120°W','100°W','80°W','60°W','40°W'])

, которое дает этот участок:

the plot

Однако, добавление ylabel='latitude (N)' для панели А все еще проблематично c. Но это достаточно хорошо для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...