2012-11-25 15 views
7

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

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を上書きすると思います。あなたはプロットを保存するために正しいことをやっている

答えて

9

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

私がやったこと
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のstring formatting syntax

  • を使用してテンプレートを作成しますenumerate() functionを使用してループにカウンターを追加しました。

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

+0

ご協力ありがとうございます。 iveはこのメソッドを試してみましたが、そのすべてが機能していましたが、プロットは空白になっています。私はpl.show()も使用し、実際の節約ビットではなく、正しいプロットを作り出しました。何か案は? – user1841859

+0

@ user1841859:わかりません。あなたがそれを保存するには 'pl.show()'が必要でしょうか?私は自分で 'ピラブ'を使っていません。 –

+0

plt.savefigの前にplt.show()を置くことはできません 表示する前に保存しておく必要があります。 – arynaq

0

は(ちょうどf.close()前にそのコードを入れて、あなたがplとしてpyplotをインポートするので、plt.savefigではなくpl.savefigを使用してください)。各出力プロットに異なるファイル名を付ける必要があります。

これを行う1つの方法は、あなたを介して行くファイルごとに増分されますカウンタ変数を追加し、このような何かをやって、例えば、ファイル名にそれを追加することです:

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

もう一つの選択肢であります入力のファイル名に基づいて一意の出力ファイル名を作成します。入力パスを取り、_で任意のパス区切り文字に置き換えられます

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

:あなたのような何かを試みることができます。これを出力ファイル名の一部として使用できます。

関連する問題