清理matplotlib的队列,并保存大的pdf数字

时间:2014-07-22 10:35:09

标签: python matplotlib

我需要使用来自不同文件的数据在同一个pdf文件中保存不同的图。 我使用这个代码,每个步骤打开某个文件使用一些函数分析它 并保存在pdf文件中。 我的问题是matplotlib的队列增加了,最后如果我说plt.show()我得到了大量不同的数字。我不想要这个,我想清理maplotlib的队列而不看情节。

我使用的代码是:

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的队列,或类似的东西!

最大的问题是,对于很多情节来说,队列变得如此之大以至于一切都崩溃了,而且终端说'杀了' 并退出ipython。

感谢您的帮助!

1 个答案:

答案 0 :(得分: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) 并查看是否修复了问题