Как я могу извлечь данные из маринованного GeoAxesSubplot для повторного построения на новом рисунке? - PullRequest
0 голосов
/ 16 июня 2020

Я хотел бы «загрузить» (сохранить в файл pickle) базовую карту, загруженную в cartopy, чтобы я мог заново построить график по одной из двух осей в matplotlib figure, используя другой сценарий, чем тот, который я использовал для загрузки изображений. Мне нужно сделать это, чтобы я не запрашивал Stamen каждый раз, когда мне нужен базовый слой.

Как я могу извлечь данные из p где p==<cartopy.mpl.geoaxes.GeoAxesSubplot object at 0x124210e10>

Скрипт 1

import matplotlib.pyplot as plt
import pickle
import cartopy.feature as cfeature
from cartopy.io.img_tiles import Stamen 

def main():
    tiler = Stamen('terrain-background')
    mercator = tiler.crs

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
    ax.set_extent([15.85583, 18.47056, 5.80167, 6.56194], crs=ccrs.PlateCarree())
    ax.add_image(tiler, 6)
    ax.coastlines('10m')
    #plt.show()

    pickle.dump(ax, open('map.pkl', 'wb'))

main()

Скрипт 2

import matplotlib.pyplot as plt
import pickle

p=pickle.load(open('map.pkl', 'rb'))
#plt.show() #works; but I want to integrate as a 2nd axis in another figure, now its own figure 

fig, axes = plt.subplots(1, 2)
axes[1] = p
plt.show() #shows two axes; but axes[1] is not the map

Примечание: я пометил пакет basemap, поскольку cartopy заменяет его в какой-то момент

1 Ответ

0 голосов
/ 25 июня 2020

Вы не можете легко поменять один набор осей на другой в существующей фигуре.

Что вы можете попробовать в своем Script 2 , это:

p = pickle.load(open('map.pkl', 'rb'))

fig = plt.figure()
p.figure = fig
fig.axes.append(p)
fig.add_axes(p)

Могут возникнуть проблемы с позиционированием загруженных осей, которые можно отрегулировать, сохранив положение исходных осей, а затем выполнив p.set_position(saved_position).

...