Как использовать Axes.update () в Matplotlib, используя Cartopy? - PullRequest
1 голос
/ 26 марта 2020

Мне нужно знать, как обновить оси графика после создания. Я видел в документации matplotlib здесь .

Я пробовал следующий код:

    ax.update(ax.properties())

, но я получаю следующую ошибку:

Traceback (most recent call last):

  File "<ipython-input-127-e6624b1841f4>", line 1, in <module>
    ax.update(ax.properties())

  File "C:\Users\cjmar\Anaconda3\lib\site-packages\matplotlib\artist.py", line 974, in update
    ret = [_update_property(self, k, v) for k, v in props.items()]

  File "C:\Users\cjmar\Anaconda3\lib\site-packages\matplotlib\artist.py", line 974, in <listcomp>
    ret = [_update_property(self, k, v) for k, v in props.items()]

  File "C:\Users\cjmar\Anaconda3\lib\site-packages\matplotlib\artist.py", line 970, in _update_property
    .format(type(self).__name__, k))

AttributeError: 'GeoAxesSubplot' object has no property 'children'

, но, изучая ax.properties(), действительно есть 'children' ключ там. Не уверен что происходит. Я знаю, что cartopy, похоже, переопределяет класс GeoAxes, однако, похоже, что нет ничего перегруженного в отношении метода update.

Некоторые примеры кода. Лучше всего запускать это в консоли i Python, чтобы вы могли получить доступ к объекту ax, пока график все еще отображается. Может потребоваться plt.show() внизу. Я использую Spyder, который не требует этого.

        import os
        import sys
        import matplotlib.pyplot as plt
        import matplotlib
        import mpl_toolkits
        import numpy as np
        import cartopy

        import cartopy.crs as ccrs
        fig = plt.figure()
        ax = plt.axes(projection=ccrs.NorthPolarStereo())
        ax.stock_img()

        ny_lon, ny_lat = -75, 43
        delhi_lon, delhi_lat = 77.23, 28.61

        plt.plot([ny_lon, delhi_lon], [ny_lat, delhi_lat],
                  color='blue', linewidth=2, marker='o',
                  transform=ccrs.Geodetic(),
                  )

        plt.plot([ny_lon, delhi_lon], [ny_lat, delhi_lat],
                  color='gray', linestyle='--',
                  transform=ccrs.PlateCarree(),
                  )

        ax.add_patch(matplotlib.patches.Polygon([[0,0],[20,0],[20,20],[0,20]],
                                                fill = False,color='g',ls='--',
                                                transform=ccrs.PlateCarree()))

        ax.add_patch(matplotlib.patches.Circle([30,30],radius=10,color='g',ls='--',
                                               transform=ccrs.PlateCarree()))

        plt.text(ny_lon - 3, ny_lat - 12, 'New York',
                  horizontalalignment='right',
                  transform=ccrs.Geodetic())

        plt.text(delhi_lon + 3, delhi_lat - 12, 'Delhi',
                  horizontalalignment='left',
                  transform=ccrs.Geodetic())
        # ax.set_extent([-180,180,-90,90])
        ax.set_global()

Как правильно использовать этот метод?

РЕДАКТИРОВАТЬ: Этот вопрос находится в прямой связи с другим вопросом, заданным мной. здесь

Но вопросы действительно разные, так как этот вопрос спрашивает, как использовать метод, и этот вопрос спрашивает, как обновить проекцию осей.

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