将 python matplotlib 图另存为 pickle
Save python matplotlib figure as pickle
我想将 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 轴上放大,但在我 pickle-load 图形后,这不再起作用了。
我怎样才能保存情节,以便它在加载后继续 share-x?
或者,如何在从 pickle 加载图形后恢复 share-x?
谢谢!
在当前的 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()
这样做的缺点是您需要知道要共享哪些轴。在共享所有轴的情况下,这当然很容易,如上所示。
我想将 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 轴上放大,但在我 pickle-load 图形后,这不再起作用了。 我怎样才能保存情节,以便它在加载后继续 share-x? 或者,如何在从 pickle 加载图形后恢复 share-x?
谢谢!
在当前的 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()
这样做的缺点是您需要知道要共享哪些轴。在共享所有轴的情况下,这当然很容易,如上所示。