2012-11-25 13 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") 

का इस्तेमाल किया है, लेकिन मैं यह सिर्फ एक फ़ाइल में प्रत्येक ग्राफ बचत होती है और पिछले एक अधिलेखित कर देता है लगता है।

उत्तर

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 

मैं क्या किया::

  • पाश करने के लिए एक काउंटर का उपयोग कर अजगर के string formatting syntax

  • जोड़ा गया enumerate() function का उपयोग कर एक टेम्पलेट बनाएँ आप एक काउंटर इस्तेमाल कर सकते हैं।

  • प्रत्येक साजिश के लिए एक नया फ़ाइल नाम उत्पन्न करने के लिए काउंटर और टेम्पलेट का उपयोग किया गया।

+0

हाय, आपकी मदद के लिए धन्यवाद। आईव ने इस विधि और इसकी सभी काम करने की कोशिश की, लेकिन भूखंड खाली हो रहे हैं। मैंने pl.show() को भी इस्तेमाल किया, और उन्होंने सही साजिश का उत्पादन किया, केवल वास्तविक बचत बिट नहीं। कोई विचार? – user1841859

+0

@ user1841859: मुझे कोई जानकारी नहीं है। शायद इसे बचाने से पहले 'pl.show() 'आवश्यक है? मैंने खुद को 'पिलब' का उपयोग नहीं किया है। –

+0

plt.show() plt.savefig से पहले नहीं आ सकता है आपको इसे दिखाने से पहले इसे सहेजना होगा। – arynaq

0

आप साजिश को बचाने के लिए सही काम कर रहे हैं (सिर्फ f.close() पहले कि कोड रखा, और plt.savefig बजाय pl.savefig उपयोग करने के लिए, जब से तुम pl रूप pyplot आयात सुनिश्चित कर लें)। आपको बस प्रत्येक आउटपुट प्लॉट को एक अलग फ़ाइल नाम देना होगा।

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

एक अन्य विकल्प है:

एक तरह से यह करने के लिए एक काउंटर चर है कि प्रत्येक के लिए वृद्धि की जाती हो जाता है आप के माध्यम से जाने फ़ाइल जोड़ते हैं, और फ़ाइल नाम के लिए है कि जोड़ने के लिए, उदाहरण के लिए, कुछ इस तरह कर रही है इनपुट के फ़ाइल नाम के आधार पर एक अद्वितीय आउटपुट फ़ाइल नाम बनाने के लिए। आप की तरह कुछ की कोशिश कर सकते:

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

कि इनपुट पथ ले जाएगा, और _ के साथ किसी भी पथ विभाजक बदलें। आप इसे अपने आउटपुट फ़ाइल नाम के हिस्से के रूप में उपयोग कर सकते हैं।

संबंधित मुद्दे