【问题标题】:How can I pull the data out of a pickled GeoAxesSubplot for re-plotting in a new figure?如何从腌制的 GeoAxesSubplot 中提取数据以在新图中重新绘制?
【发布时间】:2020-06-26 01:38:06
【问题描述】:

我想“下载”(保存在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 会在某个时候替换它

【问题讨论】:

    标签: python matplotlib-basemap cartopy


    【解决方案1】:

    您无法轻松地将现有图中的一组轴交换为另一组。

    您可以在 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)来进行调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      相关资源
      最近更新 更多