9

フォルダ内のすべてのテキストファイルから複数のプロットを生成するためのこのコードがあります。それは完全にうまく動作し、プロットを表示しますが、それらをすべて保存する方法を理解することはできません。

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")

しかし、これは各グラフを1つのファイルに保存し、最後のグラフを上書きするだけだと思います。

4

2 に答える 2

11

あなたがしなければならないのは、一意のファイル名を提供することだけです。カウンターを使用できます。

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

私がしたこと:

  • Pythonの文字列フォーマット構文を使用してテンプレートを作成します

  • enumerate()関数を使用してループにカウンターを追加しました。

  • カウンターとテンプレートを使用して、プロットごとに新しいファイル名を生成しました。

于 2012-11-25T20:28:19.730 に答える
0

プロットを保存するために正しいことを行っています(そのコードをの前に置くだけで、としてインポートするので、ではなくf.close()を使用してください)。各出力プロットに異なるファイル名を指定する必要があります。pl.savefigplt.savefigpyplotpl

これを行う1つの方法は、通過するファイルごとにインクリメントされるカウンター変数を追加し、それをファイル名に追加することです。たとえば、次のようにします。

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

別のオプションは、入力のファイル名に基づいて一意の出力ファイル名を作成することです。次のようなことを試すことができます:

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

これにより、入力パスが取得され、パス区切り文字が。に置き換えられます_。これを出力ファイル名の一部として使用できます。

于 2012-11-25T20:27:55.260 に答える