使用matplotlib绘制图像

2024-06-01 21:34:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从以下问题重新创建简单的pickle图示例:Saving interactive Matplotlib figures, 也来自Saving Matplotlib Figures Using Pickle。然而,当我运行给定的代码时,这些图看起来是pickle OK,但是当我尝试加载pickle图时,我得到了一个错误。我在Python 2.7.3-1上使用Canopy enthrough(v1.6.2.3262)、Matplotlib 1.5.1-1和Numpy 1.9.2-3运行它。 pickle代码是:`

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'))`

加载图形的代码是:

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()

我得到的错误是:

%run "Z:\EFNHigh_Res\show_picklefig.py"
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
Z:\EFNHigh_Res\show_picklefig.py in <module>()
      4 
      5 #plot simple sinus function
----> 6 fig_handle = pl.load(open('Z:\EFNHigh_Res\sinus.pickle','rb'))
      7 fig_handle.show()

C:\Users\Tom\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.6.2.3262.win-x86_64\lib\pickle.pyc in load(file)
   1376 
   1377 def load(file):
-> 1378     return Unpickler(file).load()
   1379 
   1380 def loads(str):

C:\Users\Tom\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.6.2.3262.win-x86_64\lib\pickle.pyc in load(self)
    856             while 1:
    857                 key = read(1)
--> 858                 dispatch[key](self)
    859         except _Stop, stopinst:
    860             return stopinst.value

C:\Users\Tom\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.6.2.3262.win-x86_64\lib\pickle.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:\Users\Tom\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.6.2.3262.win-x86_64\lib\pickle.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

我知道Python3和2之间有一个区别,在Python2的转储文件中应该使用该文件而不是open(我假设pickle加载),所以我在代码中尝试了这两种组合。

我不确定错误告诉了我什么,所以我还没有得到进一步的了解,任何帮助了解错误或解决问题的赞赏。


Tags: 代码nameinimportselfasnpfig
1条回答
网友
1楼 · 发布于 2024-06-01 21:34:55

copy_reg的错误是由代码中的write格式引起的,用于pickle图形,正确的代码应该包括wb而不是write语句中的w,如下所示:

# Save figure handle to disk
import pickle
with open('sinus.pickle', 'wb') as f: # should be 'wb' rather than 'w'
    pickle.dump(fig_handle, f) 

这是根据copy_-reg错误和在另一个问题ImportError: No module named copy_reg pickle中提供的关于pickling时copy_-reg错误的解决方案确定的。

相关问题 更多 >