【问题标题】:Saving multiple plots保存多个图
【发布时间】:2012-11-25 20:18:00
【问题描述】:

我有这段代码可以从文件夹中的所有文本文件中生成多个图。它运行得很好并显示了情节,但我不知道如何将它们全部保存。

import re
import numpy as np
import matplotlib.pyplot as plt
import pylab as pl
import os

rootdir='C:\documents\Neighbors for each search id'

for subdir,dirs,files in os.walk(rootdir):
 for file in files:
  f=open(os.path.join(subdir,file),'r')
  print file
  data=np.loadtxt(f)

  #plot data
  pl.plot(data[:,1], data[:,2], 'gs')

  #Put in the errors
  pl.errorbar(data[:,1], data[:,2], data[:,3], data[:,4], fmt='ro')

  #Dashed lines showing pmRa=0 and pmDec=0
  pl.axvline(0,linestyle='--', color='k')
  pl.axhline(0,linestyle='--', color='k')
  pl.show()

  f.close()

我以前用过

fileName="C:\documents\FirstPlot.png"
plt.savefig(fileName, format="png")

但我认为这只是将每个图形保存到一个文件中并覆盖最后一个文件。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    您所要做的就是提供唯一的文件名。您可以使用计数器:

    fileNameTemplate = r'C:\documents\Plot{0:02d}.png'
    
    for subdir,dirs,files in os.walk(rootdir):
        for count, file in enumerate(files):
            # Generate a plot in `pl`
            pl.savefig(fileNameTemplate.format(count), format='png')
            pl.clf()  # Clear the figure for the next loop
    

    我做了什么:

    【讨论】:

    • 嗨,感谢您的帮助。我尝试了这种方法并且它所有的工作,但情节出来是空白的。我也使用了 pl.show(),他们产生了正确的情节,而不是实际的节省位。有什么想法吗?
    • @user1841859:我不知道。也许需要pl.show() 才能保存?我自己没有使用过pylab
    • plt.show() 不能出现在 plt.savefig 之前 必须先保存才能显示。
    • 我认为这是可行的,但现在意识到它正在为每个文件绘制并保存一个新文件,但每个文件都包含来自所有先前绘图的数据,而顶部只有新数据?
    • @user1841859:啊,这是一个单例情节。 API 指向一个明确的方法pl.clf(),你也需要在每个循环中调用它。
    【解决方案2】:

    您正在做正确的事情来保存情节(只需将该代码放在f.close() 之前,并确保使用pl.savefig 而不是plt.savefig,因为您将pyplot 导入为pl)。你只需要给每个输出图一个不同的文件名。

    这样做的一种方法是添加一个计数器变量,该变量会随着您通过的每个文件而递增,并将其添加到文件名中,例如,执行以下操作:

    fileName = "C:\documents\Plot-%04d.png" % ifile
    

    另一个选项是根据输入的文件名创建一个唯一的输出文件名。您可以尝试以下方法:

    fileName = "C:\documents\Plot-" + "_".join(os.path.split(os.path.join(subdir,file))) + ".png"
    

    这将采用输入路径,并将任何路径分隔符替换为_。您可以将其用作输出文件名的一部分。

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 2021-05-06
      • 1970-01-01
      • 2021-12-08
      • 2017-03-13
      • 2014-08-03
      • 2012-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多