2012-11-25 23 views
7

Mam ten kod do tworzenia wielu działek ze wszystkich plików tekstowych w folderze. Działa idealnie dobrze i pokazuje działki, ale nie mogę się dowiedzieć, jak je wszystkie zapisać.Zapisywanie wielu działek

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

już wcześniej stosowany

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

ale myślę, że to po prostu zapisuje każdy wykres w jednym pliku i nadpisuje ostatni.

Odpowiedz

9

Wszystko, co musisz zrobić, to podać unikalne nazwy plików. Można użyć licznika:

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 

co robiłam:

+0

Witam, dziękuję za pomoc. Próbowałem tej metody i jej wszystkich działa, ale wykresy są puste. Użyłem również pl.show(), a oni wyprodukowali właściwą fabułę, po prostu nie faktyczny bit oszczędzania. jakieś pomysły? – user1841859

+0

@ user1841859: Nie mam pojęcia. Być może 'pl.show()' jest wymagane, zanim będzie można go zapisać? Sam nie używałem 'pylab'. –

+0

plt.show() nie może przyjść przed plt.savefig Musisz go najpierw zapisać przed wyświetleniem. – arynaq

0

Robisz to, co trzeba, aby zapisać działki (wystarczy umieścić ten kod przed f.close() i upewnij się, aby skorzystać pl.savefig zamiast plt.savefig, ponieważ import pyplot jak pl). Trzeba tylko nadać każdej działce wyjściowej inną nazwę pliku.

Jednym ze sposobów, aby to zrobić, aby dodać zmienną licznika, który pobiera zwiększany dla każdego pliku można przejść przez, i dodać, że do nazwy pliku, na przykład, robi coś takiego:

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

Inną opcją jest aby utworzyć unikalną nazwę pliku wyjściowego na podstawie nazwy pliku wejściowego. Można spróbować czegoś takiego:

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

która odbędzie ścieżkę wejścia i zastępuje żadnych separatorów ścieżki z _. Możesz użyć tego jako części twojej wyjściowej nazwy pliku.

Powiązane problemy