2017-09-26 89 views
1

所以我有一個功能generategraph(文件),它正確地創建基於參數的數據的條形圖,然後保存它。這是保存它的部分。Matplotlib savefig()在多個圖形保持儲蓄在同一圖形

plt.show() 
    savefile = file.split('.txt')[0] + '.png' 
    plt.savefig(savefile) 

然後在main中,我會通過一組文件並在每個文件上調用generategraph。

for fil in files: 
     generategraph(fil) 

plt.show()給了我正確的圖形(不同的圖形每次),但是當我去保存的人物,他們都是同一個圖(中所以LEN(文件)的保存的數字號碼,但每一個是第一個文件的圖形,如果這是有道理的)。我只是困惑,因爲plt.show()是做什麼的我想plt.savefig做。

回答

1

您可能需要驗證您保存圖的名字是每個不同。 (以下是僞代碼,你如何得到的文件名,目前尚不清楚。)

[編輯]那麼你可能應該把plt.show()plt.savefig(savefile)

#initialize idx to 0 earlier, and don't re-initialize it. 

idx += 1 
savefile = file + str(idx) + '.png' # file might need to be replaced by a string 
plt.savefig(savefile) 
plt.show()    # place after plt.savefig() 

或者,你改變generategraph簽名

def generategraph(file, idx): 
    savefile = file + str(idx) + '.png' # file might need to be replaced by a string 
    plt.savefig(savefile) 
    plt.show()    # place after plt.savefig() 



for idx, fil in enumerate(files): 
    generategraph(fil, idx) 
+0

每一個數字是每一個不同的名稱保存時間在我寫的代碼中。例如,如果我有3個文件名爲「a.txt中,b.txt,c.txt」我的代碼將通過各一個,基於其數據的圖形,然後將其保存爲「a.png,b.png ,c.png「。代碼的這部分工作,因爲我最終與這些.png文件。問題是這些.png文件中的每一個都具有相同的圖形。但是plt.show()顯示的圖是正確的圖。我只是困惑,因爲我正在保存並在代碼中顯示它們。它應該是一樣的,但不是。 –

+0

OK,好知道 - 我編輯我的答案,提示放置'plt.show()'plt.savefig後'()' –

+0

完善,.savefig後放置.show()()解決了這一問題。謝謝! –

1

您正在使用狀態機(pyplot)接口。別。他們直接

fig1, ax1 = pyplot.subplots() 

法:

明確創建數字

lines, = ax1.plot(data1, data2, ...) 

然後保存並單獨關閉它們:

fig1.savefig(filename, dpi=300) 
pyplot.close(fig1)