我曾经pickle转储matplotlib数字,如SO中的答案所示。下面是代码片段——
import pickle
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1,2,3],[10,-10,30])
pickle.dump(fig, open('fig.pickle', 'wb'))
Run Code Online (Sandbox Code Playgroud)
下面是加载腌制图的代码片段-
import pickle
figx = pickle.load(open('fig.pickle', 'rb'))
figx.show()
Run Code Online (Sandbox Code Playgroud)
上面的代码显示以下错误-
AttributeError: 'NoneType' object has no attribute 'manager'
Figure.show works only for figures managed by pyplot, normally created by pyplot.figure().
Run Code Online (Sandbox Code Playgroud)
我在 Ubuntu 14.04 LTS 64 位操作系统上使用 Python 3.6.3。以下是我的环境的更多详细信息-
> import matplotlib
> matplotlib.__version__
'2.1.0'
> matplotlib.get_backend()
'Qt5Agg'
> import sys
> sys.version_info
sys.version_info(major=3, minor=6, micro=3, releaselevel='final', serial=0)
Run Code Online (Sandbox Code Playgroud)
PS:我的问题似乎类似于在 SO 上提出的这个问题。但是,它是不同的,因为提供的答案没有运行并抛出异常。
你需要一个画布管理器才能展示你的身材。问题Matplotlib 中的相同概念:如何显示已关闭的图形适用,您可以创建一个函数来制作虚拟图形并窃取其经理,如下所示(归功于写上述答案的 Jean-Sébastien)。
def show_figure(fig):
# create a dummy figure and use its
# manager to display "fig"
dummy = plt.figure()
new_manager = dummy.canvas.manager
new_manager.canvas.figure = fig
fig.set_canvas(new_manager.canvas)
Run Code Online (Sandbox Code Playgroud)
使用此功能,您可以运行:
show_figure(figx)
figx.show()
Run Code Online (Sandbox Code Playgroud)