【问题标题】:Save python matplotlib figure as pickle将 python matplotlib 图保存为泡菜
【发布时间】:2018-12-18 06:05:54
【问题描述】:

我想将 matplotlib 图形保存为 pickle,以使我的团队能够轻松加载它们并调查异常事件。使用简单的图像格式会失去放大和研究图形的能力。所以我试着腌制我的身材:

fig, axarr = plt.subplots(2, sharex='all') # creating the figure
... # plotting things
...
pickle.dump(fig, open('myfigfile.p'), 'wb'))

然后我加载它。看起来不错。一开始。

fig = pickle.load(open('myfigfile.p', 'rb'))
plt.show()

但后来我发现 sharex 不起作用。当我放大一个子图时,另一个子图保持静止。在原始图上,这很好用,并且放大在两个 x 轴上都放大了,但是在我腌制加载图形之后,这不再起作用了。 如何保存绘图以便在加载后继续共享-x? 或者,从泡菜中加载图形后如何恢复 share-x?

谢谢!

【问题讨论】:

    标签: python matplotlib pickle


    【解决方案1】:

    在 matplotlib 的当前开发版本中,由于fix provided,这应该可以工作。

    使用当前发布的 matplotlib 版本,需要重新建立共享,例如喜欢

    import matplotlib.pyplot as plt
    import pickle
    
    fig, axes = plt.subplots(ncols=3, sharey="row")
    axes[0].plot([0,1],[0,1])
    axes[1].plot([0,1],[1,2])
    axes[2].plot([0,1],[2,3])
    
    pickle.dump(fig, file('fig1.pkl', 'wb'))  
    
    plt.close("all")
    
    fig2 = pickle.load(file('fig1.pkl','rb'))
    ax_master = fig2.axes[0]
    for ax in fig2.axes:
        if ax is not ax_master:
            ax_master.get_shared_y_axes().join(ax_master, ax)
    
    plt.show()
    

    这样做的缺点是您需要知道要共享哪些轴。在所有轴共享的情况下,这当然很容易,如上所示。

    【讨论】:

    • 太棒了。这正是我所需要的。我只将 get_shared_y_axes 更改为 get_shared_x_axes,因为我不想放大影响 y,只影响 x。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 2020-01-06
    • 2015-12-02
    • 2014-10-03
    • 1970-01-01
    相关资源
    最近更新 更多