Преобразование базовой карты в Cartopy, есть ли такие функции, как shiftgrid () базовой карты? - PullRequest
2 голосов
/ 24 октября 2019

Я конвертирую приложение, использующее базовую карту набора инструментов matplotlib, для использования Cartopy при подготовке к переходу с Python 2 на Python 3. Я нашел похожие функции в Cartopy для addmaplic () 'и maskoceans () базовой карты, однако яне может найти что-то похожее ни в numpy, ни в Cartopy для функции shiftgrid () базовой карты.

Этот код использует Basemap: '' '

    import matplotlib.pyplot as plt
    from mpl_toolkits.basemap import Basemap
    import cartopy
    import cartopy.crs as ccrs
    import cartopy.feature as cfeature
    import numpy as np
    from mpl_toolkits.basemap import shiftgrid

    bmap = Basemap(projection='ortho', lat_0=0, lon_0=0)
    lons = np.arange(30, 410, 30)
    lons[1] = 70
    lats = np.arange(0, 100, 10)

    data = np.indices((lats.shape[0], lons.shape[0]))
    data = data[0] + data[1]

    data, lons = shiftgrid(180., data, lons, start=False)

    llons, llats = np.meshgrid(lons, lats)
    x, y = bmap(llons, llats)
    bmap.contourf(x, y, data)
    bmap.drawcoastlines()

' ''

Исходные данные: данные '' '

    [[ 0  1  2  3  4  5  6  7  8  9 10 11 12]
     [ 1  2  3  4  5  6  7  8  9 10 11 12 13]
     [ 2  3  4  5  6  7  8  9 10 11 12 13 14]
     [ 3  4  5  6  7  8  9 10 11 12 13 14 15]
     [ 4  5  6  7  8  9 10 11 12 13 14 15 16]
     [ 5  6  7  8  9 10 11 12 13 14 15 16 17]
     [ 6  7  8  9 10 11 12 13 14 15 16 17 18]
     [ 7  8  9 10 11 12 13 14 15 16 17 18 19]
     [ 8  9 10 11 12 13 14 15 16 17 18 19 20]
     [ 9 10 11 12 13 14 15 16 17 18 19 20 21]]

     lons

     [ 30  70  90 120 150 180 210 240 270 300 330 360 390]

     After the 'data, lons = shiftgrid(180., data, lons, start=False)':
     data

     [[ 5  6  7  8  9 10 11 12  1  2  3  4  5]
      [ 6  7  8  9 10 11 12 13  2  3  4  5  6]
      [ 7  8  9 10 11 12 13 14  3  4  5  6  7]
      [ 8  9 10 11 12 13 14 15  4  5  6  7  8]
      [ 9 10 11 12 13 14 15 16  5  6  7  8  9]
      [10 11 12 13 14 15 16 17  6  7  8  9 10]
      [11 12 13 14 15 16 17 18  7  8  9 10 11]
      [12 13 14 15 16 17 18 19  8  9 10 11 12]
      [13 14 15 16 17 18 19 20  9 10 11 12 13]
      [14 15 16 17 18 19 20 21 10 11 12 13 14]]

      lons

      [-180 -150 -120  -90  -60  -30    0   30   70   90  120  150  180]

' '' Я попробовал следующий кодовый код, чтобы воссоздать то, что сделала Shift Basemap. Это код Cartopy, некоторые вещи закомментированы, когда я их пробовал за один раз: '' '

    DATA_CRS = ccrs.PlateCarree()
    lons = np.arange(30, 410, 30)
    lons[1] = 70
    lats = np.arange(0, 100, 10)

    data = np.indices((lats.shape[0], lons.shape[0]))
    data = data[0] + data[1]
    # data2 = np.roll(data, -5)
    # lons2 = np.mod(lons2 - 180.0, 360.0) - 180.0
    cm_lon = 0
    #llons, llats = np.meshgrid(lons2, lats)
    llons, llats = np.meshgrid(lons, lats)
    PROJECTION = ccrs.Orthographic(central_longitude=cm_lon)
    fig1 = plt.figure(num=1, figsize=(11, 8.5), dpi=150)
    ax = plt.axes(projection=PROJECTION)
    ax.add_feature(cfeature.COASTLINE, linewidths=0.7)
    ax.add_feature(cfeature.BORDERS, edgecolor='black', linewidths=0.7)
    ax.contourf(llons, llats, data, transform=ccrs.PlateCarree())

' ''

Данные и долготы как оригинальные, и я простоиспользовал 'central_longitude' в проекции. Изображение базовой карты показывает весь земной шар, но изображение Cartopy показывает только от экватора вверх. Цвет данных кажется похожим, за исключением крайней правой стороны, поэтому я обеспокоен тем, что данные не отображались в Cartopy так же, как в базовой карте.

Итак, вопрос в том ... есть что-нибудь эквивалентное shiftgrid () Базовой карты, или мне нужно выяснить что-то похожее на shiftgrid () Базовой карты или просто использовать 'central_longitude' в проекции? Кажется, я не могу вставить файлы .png. Любая помощь очень ценится. Я искал в Интернете в поисках эквивалентных функций, но не нашел одну для shiftgrid (). Спасибо.

1 Ответ

1 голос
/ 29 октября 2019

Я не знаю ни одного shiftgrid эквивалента. Возможно, стоит открыть проблему на трекере ошибок CartoPy , запрашивающем такую ​​функцию. В этом случае было бы полезно упомянуть хороший пример использования, который поможет расширить функциональность.

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