Python Pickled Matplotlib地物对象-检索数据
我试图将一个地物对象保存为pickle文件,稍后从中检索数据。我练习了一个示例代码,但加载后无法从pickle文件中检索数据。下面是我的代码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
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)
时发生的情况。非常感谢您花时间。