Недостаток проекции для Cartopy Contour - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь поместить некоторые данные в контурную карту с помощью картопий. Однако после нанесения данных проекция все еще кажется отключенной. Surface_temp.X и surface_temp.Y - широта / долгота, а masked_fill - фактические значения данных. Кажется, это сработало в базовой карте, но я не уверен, почему это не так в картопах.

Cartopy:

fig = plt.figure(figsize=(12,4.76), dpi=100)
fig.clf()
ax = plt.axes(projection=ccrs.Mercator())
ax.coastlines()
ax.contourf(surface_temp.X, surface_temp.Y, surface_temp.masked_fill[:], latlon = 'true', transform = ccrs.Mercator())
plt.show()

Базовая карта:

fig = plt.figure(figsize=(15,4.76), dpi=100)
        fig.clf()
        plt.axes([0,0,1,1], frameon=False)
        plt.title(title)
        m = Basemap(projection='merc',llcrnrlat=-80,urcrnrlat=80, llcrnrlon=0,urcrnrlon=360,lat_ts=20,resolution='c')
m.contourf(surface_temp.X, surface_temp.Y, surface_temp.masked_fill[:], latlon = 'true')

Базовая карта Результат:

Basemap

Cartopy Result (Контур закомментирован):

Cartopy - Merc

Cartopoy Result (Contour)

Cartopy - Contour

1 Ответ

1 голос
/ 26 июня 2019

Парадигма картопии , кажется, равна , чтобы всегда работать с координатами широта / долгота. Это означает, что вы не должны преобразовывать свои данные в соответствии с проекцией, а оставаться в широте / долготе.

Следовательно, вместо

ax.contourf(..., transform = ccrs.Mercator())

вам понадобится

ax.contourf(..., transform = ccrs.PlateCarree())

Полный пример:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.examples.waves import sample_data

ax = plt.axes(projection=ccrs.Mercator())

lons, lats, data = sample_data(shape=(20, 40))

ax.contourf(lons, lats, data, transform=ccrs.PlateCarree())

ax.coastlines()
ax.gridlines()

plt.show()

enter image description here

...