清理matplotlib队列,保存大pdf图形
我需要把不同的图表保存在同一个PDF文件里,这些图表的数据来自不同的文件。我用的代码是,每次打开一个特定的文件,用某个函数分析它,然后把结果保存到PDF文件里。
我的问题是,matplotlib的队列越来越多,最后如果我输入plt.show(),就会出现很多不同的图表。我不想这样,我想在不显示图表的情况下清空matplotlib的队列。
我用的代码是:
mu=arange(0.01,20.,0.03)
info1=[]
info2=[]
for i in range(0,7):
inf1=[]
inf2=[]
pathe = path +"%i/"%(i)
nameplot= "time_traces_%d.pdf"%(i)
pp=PdfPages(nameplot)
for j in mu:
filename="InfoDati_"+"%lf_"%(j)+"%d.txt"%(i)
fil = pathe + filename
data=loadtxt(fil)
t=data[:,0]
x=data[:,1]
y=data[:,2] # y, z should be the simulation, x the sin
z=data[:,3]
x=array(x)
y=array(y)
z=array(z)
t=array(t)
fig=filename
fig=plt.figure()
plt.plot(t,x,t,y,t,z)
plt.xlim(0,500)
pp.savefig(fig)
pp.close()
`
如果我现在输入plt.show(),就会出现成千上万的图表……我需要退出plt.plot的队列,或者类似的操作!
最大的问题是,当图表数量很多时,队列会变得非常大,导致一切崩溃,终端显示'Killed',然后ipython就退出了。
谢谢大家的帮助!
1 个回答
1
我不太确定我是否理解了问题,但你代码中的这一部分表明你可能对自己在做什么不太确定,所以错误可能就在这里:
fig=filename # useless
fig=plt.figure() # you're creating a figure that you never destroy
plt.plot(t,x,t,y,t,z)
plt.xlim(0,500)
pp.savefig(fig)
pp.close() # this shouldn't be inside this loop
- 你把
filename
赋值给fig
是没有必要的,因为在下一行你又把plt.figure()
赋值给了同一个变量。 - 当你使用
pp.close()
时,这会关闭你当前正在保存图像的PDF文件。但你是在循环里面执行这个操作,而pp
是在循环外创建的。 - 这让人得出结论,你的本意是把每个图像添加到PDF文件中,然后在创建下一个图像之前关闭当前打开的图像。所以你可能想在循环里面使用
plt.close(fig)
。 - 因为你发布的代码中从来没有关闭你创建的这些图像,这也解释了为什么你会有太多打开的图像。
试着去掉那行多余的代码,把 pp.close()
移到循环 之后 的某个地方,在循环 里面 添加 plt.close(fig)
,看看这样是否能解决你的问题。