Картопия: береговые линии () и контур (), мешающие - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь перейти с базовой карты на демонстрационные примеры в виде карт. У меня есть простой код, используя как coastlines () и contourf (). Я могу получить оба отдельно, но не одновременно. Набор данных представляет собой файл netcdf, содержащий данные о температуре поверхности моря западной части Средиземного моря. Код:

   import numpy as np
   from netCDF4 import Dataset
   import cartopy
   import matplotlib.pyplot as plt

   # DATA
   data = Dataset('20190715.0504.n19.nc','r')
   lon = data.variables['lon'][:]
   lat = data.variables['lat'][:]
   sst = data.variables['mcsst'][0,:,:].squeeze()
   xxT,yyT = np.meshgrid(lon,lat)

   # PLOT
   fig = plt.figure(figsize=(10, 5))
   ax1 = fig.add_axes([0.01,0.01,0.98,0.98],projection=cartopy.crs.Mercator())
   ax1.coastlines()
   #ax1.contourf(xxT,yyT,sst)
   ax1.set_extent([16.5, -15.0, 35.0, 46.5])

   plt.show()

С этим кодом я получаю:

enter image description here

Если я использую:

   #ax1.coastlines()
   ax1.contourf(xxT,yyT,sst)
   ax1.set_extent([16.5, -15.0, 35.0, 46.5])

У меня белый прямоугольник.

Если я использую:

   #ax1.coastlines()
   ax1.contourf(xxT,yyT,sst)
   ax1.set_extent([16.5,-15.0,35.0,46.5],crs=cartopy.crs.Mercator())

Я получаю контурные данные.

enter image description here

Но с обоими:

   ax1.coastlines()
   ax1.contourf(xxT,yyT,sst)
   ax1.set_extent([16.5,-15.0,35.0,46.5],crs=cartopy.crs.Mercator())

контур в порядке! но без береговой линии. И если наконец

   ax1.coastlines()
   ax1.contourf(xxT,yyT,sst)
   ax1.set_extent([16.5,-15.0,35.0,46.5])

показаны только береговые линии, а не контур! Я пытаюсь понять, как мне поступить, потому что возникли проблемы при попытке включить это в GUI с опциями показать / скрыть линии, особенности и т. Д. c. На всякий случай я использую Python 3.7.4, Cartopy 0.17, proj4 5.2, matplotlib 3.1.1. Спасибо!

1 Ответ

0 голосов
/ 07 февраля 2020

Благодаря предложению Swatchai, хотя я до сих пор не понимаю, почему мне нужно использовать ключевое слово transform с указанным ключевым словом проекции c PlateCarree , код работает нормально if:

fig = plt.figure(figsize=(10, 5))
ax1 = fig.add_axes([0.01, 0.01, 0.98, 0.98],projection=cartopy.crs.Mercator())
ax1.coastlines('10m')
ax1.set_extent([16.5, -15.0, 35.0, 46.5])
ax1.contourf(xxT,yyT,sst,transform=cartopy.crs.PlateCarree())

Вот результат: enter image description here

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