2012-11-25 25 views
7

Bir klasördeki tüm metin dosyalarından birden çok çizim üretmek için bu kodu kullanıyorum. Mükemmel bir şekilde çalışıyor ve arazileri gösteriyor ama hepsini nasıl kurtaracağımı anlayamıyorum.Birden çok grafiği kaydetme

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

Daha önce

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

kullandık ama bu sadece bir dosya içine her grafiği kaydeder ve sonuncusu üzerine yazar düşünüyorum. Sen arsa kurtarmak için doğru olanı yapıyoruz

cevap

9

Tek yapmanız gereken benzersiz dosya isimleri sağlamaktır.

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 

Yaptıklarımı:

  • enumerate() function kullanarak döngü python en string formatting syntax

  • Yükledi bir sayaç kullanarak bir şablon oluşturma Bir sayacı kullanabilirsiniz.

  • Her çizim için yeni bir dosya adı oluşturmak üzere sayaç ve şablonu kullandık.

+0

Merhaba, yardımlarınız için teşekkürler. Bu yöntemi ve tüm çalışmalarını denedim, ancak parseller boş çıkıyor. Pl.show() 'ı kullandım, ve gerçek arsa bitini değil, doğru komployu ürettiler. herhangi bir fikir? – user1841859

+0

@ user1841859: Hiçbir fikrim yok. Belki bunu kaydetmek için önce 'pl.show()' gereklidir? Ben kendim pylab kullanmamıştım. –

+0

plt.show() plt.savefig 'dan önce gelemiyor Gösterilmeden önce kaydetmelisiniz. – arynaq

0

(sadece f.close() önce bu kodu koymak ve pl olarak pyplot içe beri plt.savefig yerine pl.savefig kullandığınızdan emin olun). Her çıktı grafiğine farklı bir dosya adı vermelisiniz.

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

Başka bir seçenek ise: Bunu yapmak için

bir yolu böyle bir şey yaptığını, sen geçmesi dosyası her biri için artırılır alır bir karşı değişken eklemek ve örneğin dosya adına bu eklemektir girdinin dosya adına göre benzersiz bir çıkış dosya adı yapmak. Sen gibi bir şey deneyebilirsiniz: giriş yolunu alacak

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

ve _ ile herhangi bir yolu ayracı değiştirin. Bunu, çıkış dosya adınızın bir parçası olarak kullanabilirsiniz.

İlgili konular