如何一次生成多个matplotlib图表?

2 投票
2 回答
544 浏览
提问于 2025-04-16 07:13

我想生成几个图表,并把它们保存为 .png 文件。但是看起来 matplotlib 把下一个图表叠加在了前一个图表上:

def do_pie(fic,data):
    import pylab    

    # make a square figure and axes
    pylab.figure(1, figsize=(6,6))
    ax = pylab.axes([0.1, 0.1, 0.8, 0.8])

    pylab.pie(data,labels=data)
    pylab.title(fic, bbox={'facecolor':'0.8', 'pad':5})
    pylab.savefig('%s.png' % fic,dpi=100)

do_pie('tarte',[10,20,30])
do_pie('gateau',[33,44])

这个脚本生成了两个 PNG 文件。tarte.png 是正确的,但 gateau.png 却显示了一些关于 tarte.png 的信息,比如 102030,这些本来不应该显示。

那么,怎么才能从头开始绘制一个新的图表呢?

2 个回答

0

比如,你可以把图形的实例存放在一个字典里,然后在程序结束的时候,把所有的图形输出出来:

figures = dict()

def do_pie(fic,data):
    import pylab    

    # make a square figure and axes
    figures[fic] = pylab.figure(figsize=(6,6))
    ax = pylab.axes([0.1, 0.1, 0.8, 0.8])

    pylab.pie(data,labels=data)
    pylab.title(fic, bbox={'facecolor':'0.8', 'pad':5})

do_pie('tarte',[10,20,30])
do_pie('gateau',[33,44])

for fig in figures:
    figures[fig].savefig('%s.png' % fic, dpi=100)
3

保存完图形对象后,直接把它关闭就行了。

def do_pie(fic,data):
    import pylab    
    # make a square figure and axes
    pylab.figure(1, figsize=(6,6))
    ax = pylab.axes([0.1, 0.1, 0.8, 0.8])
    pylab.pie(data,labels=data)
    pylab.title(fic, bbox={'facecolor':'0.8', 'pad':5})
    pylab.savefig('%s.png' % fic,dpi=100)
    pylab.close()

撰写回答