循环中的图表被覆盖。

3

我正在尝试在循环中创建多个图表。我创建的图表每次都会自动保存在不同的文件夹中。这是代码:

x = [2,4,6]
y = [1,2,3]
for i in x:
    for j in y:
        outputpath = './home/' + 'folder'+ str(i) + str(j)
        if not path.exists(outputpath):
            try:
                os.makedirs(outputpath)
            except OSError:
                print("Creation failed")
            else:
                print("Successfully created")
        a =  np.random.rand(1000)
        b = np.random.rand(20000)
        
        #Plotting a
        plt.scatter((range(0,len(a))),a)
        path1 = outputpath + '/' + 'a' + '.png'
        plt.savefig(path1)

        #Plotting b
        plt.scatter((range(0,len(b))),b)
        path2 = outputpath + '/' + 'b' + '.png'
        plt.savefig(path2)

图表被保存在相应的文件夹中。但是每次生成新的图表时,都会覆盖旧的图表。如下图所示。该图表是为i = 2和j = 2创建的。该图表保存在./home/folder22中,并且也被之前文件夹中生成的图表覆盖了。我该如何避免这种情况发生?

enter image description here

更新:我相信每次绘图之前都必须使用plt.figure()?

你能在每个循环中打印出path1和path2并显示输出吗? - anarchy
是的。每次循环运行时,path1和path2如下所示:./home/folder21/a.png ./home/folder21/b.png等等。 - EngGu
你可以像你预期的那样使用plt.figure()。简单的解决方案是在for循环之前添加一个计数变量并将其设置为0,然后在每个plt.scatter()之前将其增加1,然后使用该计数器作为参数调用plt.figure()函数。 - Esa Tuulari
1个回答

3
您使用 plt.close() 的方式如下所示:
x = [2,4,6]
y = [1,2,3]
for i in x:
    for j in y:
        outputpath = './home/' + 'folder'+ str(i) + str(j)
        if not path.exists(outputpath):
            try:
                os.makedirs(outputpath)
            except OSError:
                print("Creation failed")
            else:
                print("Successfully created")
        a =  np.random.rand(1000)
        b = np.random.rand(20000)
        
        #Plotting a
        plt.scatter((range(0,len(a))),a)
        path1 = outputpath + './' + 'a' + '.png'
        plt.savefig(path1)
        plt.close()


        #Plotting b
        plt.scatter((range(0,len(b))),b)
        path2 = outputpath + './' + 'b' + '.png'
        plt.savefig(path2)
        plt.close()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接