Python Pickled Matplotlib地物对象-检索数据

Python Pickled Matplotlib地物对象-检索数据,python,matplotlib,pickle,Python,Matplotlib,Pickle,我试图将一个地物对象保存为pickle文件,稍后从中检索数据。我练习了一个示例代码,但加载后无法从pickle文件中检索数据。下面是我的代码 import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt import pickle Fs = 8000 f = 1000 sample =20000 x = np.arange(sample) y = np.sin(2 * np.pi * f * x / Fs

我试图将一个地物对象保存为pickle文件,稍后从中检索数据。我练习了一个示例代码,但加载后无法从pickle文件中检索数据。下面是我的代码

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import pickle

Fs = 8000
f = 1000
sample =20000
x = np.arange(sample)
y = np.sin(2 * np.pi * f * x / Fs)
plt.figure()
plt.plot(x, y)
plt.xlabel('voltage(V)')
plt.ylabel('sample(n)')
plt.show()

dt=1.0/Fs
winsize=1024
shift=int(winsize/2)
frqlen=shift
datalen=len(y)
FFTdata=np.zeros((0,frqlen))
fftfreq=np.fft.fftfreq(winsize,d=dt)[:frqlen]
for i in range(0,datalen,shift):
 xdata=x[i:i+winsize]
 if len(xdata)!=winsize:
   break
 fftdata=np.fft.fft(xdata,winsize)
 absdata=np.abs(fftdata)[:frqlen]
 logpower=10* np.log(absdata ** 2).reshape((1,len(absdata)))
 FFTdata=np.append(FFTdata,logpower,axis=0)
sampleno=np.arange(1,len(FFTdata)+1)
fig,ax=plt.subplots()
FFTdata=FFTdata.T
im=ax.pcolor(sampleno,fftfreq,FFTdata)
cbar=fig.colorbar(im)
fig.show()

pickle.dump(fig,open("dumptrial.p",'wb'))

figure=pickle.load(open("dumptrial.p",'rb'))
figure.show()
data=figure.axes[0].images[0].get_data()
在最后一行
data=figure.axes[0].images[0].get_data()
python抛出一个
索引错误:列表索引超出范围

Traceback (most recent call last):

  File "<ipython-input-9-e9dc466f2abb>", line 1, in <module>
    runfile('C:/Users/na.anusuya/Documents/pickletrial.py', wdir='C:/Users/na.anusuya/Documents')

  File "C:\Users\na.anusuya\AppData\Local\Continuum\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
    execfile(filename, namespace)

  File "C:\Users\na.anusuya\AppData\Local\Continuum\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/na.anusuya/Documents/pickletrial.py", line 43, in <module>
    data=figure.axes[0].images[0].get_data()

IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
runfile('C:/Users/na.anusuya/Documents/pickletrial.py',wdir='C:/Users/na.anusuya/Documents')
文件“C:\Users\na.anusuya\AppData\Local\Continuum\Anaconda3\lib\site packages\spyder\utils\site\sitecustomize.py”,第866行,在runfile中
execfile(文件名、命名空间)
文件“C:\Users\na.anusuya\AppData\Local\Continuum\Anaconda3\lib\site packages\spyder\utils\site\sitecustomize.py”,第102行,在execfile中
exec(编译(f.read(),文件名,'exec'),命名空间)
文件“C:/Users/na.anusuya/Documents/pickletrial.py”,第43行,在
数据=图形。轴[0]。图像[0]。获取数据()
索引器:列表索引超出范围
有人能帮我从pickled figure对象中检索数据吗

(我用于此代码的源代码是:
)酸洗没有问题。 仅
图形。轴[0]。图像的长度为零

pcolor返回一个PolyCollection(

通过运行,可以看到有一个多集合

print(figure.axes[0].get_children())
现在,您可以通过

pycol = None
for obj in figure.axes[0].get_children():
    if isinstance(obj, matplotlib.collections.PolyCollection):
        pycol = obj
        break
print(pycol)

请在您的代码中添加适当的缩进。另外,在您的if条件
if len(xdata)winsize:
中,您打算测试的操作是什么?
谢谢。现在我了解了执行
pickle.load(file)
时发生的情况。非常感谢您花时间。