I am trying to recreate the simple pickle figure example from the question: Saving interactive Matplotlib figures,
which is also sourced from Saving Matplotlib Figures Using Pickle. However, when I run the given codes the figures seems to pickle OK, but then I get an error when I try to load the pickled figure. I am running it using Canopy Enthought (v1.6.2.3262), using Matplotlib 1.5.1-1 and Numpy 1.9.2-3 on Python 2.7.3-1.
The pickle code is:`
import numpy as np
import matplotlib.pyplot as plt
import pickle as pl
# Plot simple sinus function
fig_handle = plt.figure()
x = np.linspace(0,2*np.pi)
y = np.sin(x)
plt.plot(x,y)
# Save figure handle to disk
pl.dump(fig_handle,file('sinus.pickle','w'))`
The code to load the figure is:
import matplotlib.pyplot as plt
import pickle as pl
import numpy as np
# Load figure from disk and display
fig_handle = pl.load(open('sinus.pickle','rb'))
fig_handle.show()
and the error I get is:
%run "Z:EFNHigh_Resshow_picklefig.py"
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
Z:EFNHigh_Resshow_picklefig.py in <module>()
4
5 #plot simple sinus function
----> 6 fig_handle = pl.load(open('Z:EFNHigh_Ressinus.pickle','rb'))
7 fig_handle.show()
C:UsersTomAppDataLocalEnthoughtCanopyAppappdatacanopy-1.6.2.3262.win-x86_64libpickle.pyc in load(file)
1376
1377 def load(file):
-> 1378 return Unpickler(file).load()
1379
1380 def loads(str):
C:UsersTomAppDataLocalEnthoughtCanopyAppappdatacanopy-1.6.2.3262.win-x86_64libpickle.pyc in load(self)
856 while 1:
857 key = read(1)
--> 858 dispatch[key](self)
859 except _Stop, stopinst:
860 return stopinst.value
C:UsersTomAppDataLocalEnthoughtCanopyAppappdatacanopy-1.6.2.3262.win-x86_64libpickle.pyc in load_global(self)
1088 module = self.readline()[:-1]
1089 name = self.readline()[:-1]
-> 1090 klass = self.find_class(module, name)
1091 self.append(klass)
1092 dispatch[GLOBAL] = load_global
C:UsersTomAppDataLocalEnthoughtCanopyAppappdatacanopy-1.6.2.3262.win-x86_64libpickle.pyc in find_class(self, module, name)
1122 def find_class(self, module, name):
1123 # Subclasses may override this
-> 1124 __import__(module)
1125 mod = sys.modules[module]
1126 klass = getattr(mod, name)
ImportError: No module named copy_reg
I know that there is a difference between Python 3 and 2, in that file instead of open should be used in the dump (and I presume the pickle load) for Python 2, so I have tried both combinations in the code.
I am unsure what the error is telling me, so I haven't been able to get any further with this, any help on understanding the errors or fixing the problem appreciated.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…