2016-03-10 78 views
1

使用matplotlib創建多個獨立圖的最佳做法是什麼,以便稍後可以調用它們或輸出到pdf報告中?我有點不清楚如何以保留內存中的每個圖的方式來執行此操作(就像我們可以使用數據幀一樣)以供日後參考。創建和引用單獨的matplotlib圖

假設我們有這樣的代碼:

%pylab inline 
x1 = np.random.randn(50)*100 
y1 = np.random.randn(50)*100 
x2 = np.random.randn(50)*100 
y2 = np.random.randn(50)*100 

,並意圖在某種程度上是創建2個獨立的(X1,Y1)和(x2,y2)的和「拯救」他們的陰謀以後引用。目的是能夠將這些輸出到PDF中(可能通過reportlab)。 「數字」,「子圖」和「座標軸」之間的關係令我感到困惑,我不確定什麼是最佳的。我開始採用如下方法:

plt.figure(1, figsize=(8, 6)) 
plt.subplot(211) 
plt.scatter(x1, y1, c = 'r', alpha = 0.3) 

plt.subplot(212) 
plt.scatter(x2, y2, c = 'k', alpha = 0.7) 
plt.show() 

哪個技術上可行,但我不確定我以後可以參考這些。另外,我在這裏用一個小例子來說明,但實際上我可能有更多這樣的例子。

+0

不完全在現場,但幾乎是重複的。請參閱[this](http://stackoverflow.com/questions/11469336/what-is-the-difference-between-pylab-and-pyplot)。你可能想要'pyplot'。但是你仍然可以使用'pylab',並隨後調用plt.figure(N),再次選擇你的第N個圖形並繪製它。 – gg349

+0

謝謝,我實際上是在我的導入中使用pylot。我必須包含%pylab內嵌位,否則圖片不會顯示出來 – laszlopanaflex

+0

然後像'fig,ax = plt.subplots(); ax.plot([1,2,3]),fig.show()'。您可以在您的代碼中儘可能多的位置繪製「ax」軸,並且只在最後調用'fig.show()'。對於許多數字,你會有'fig1,ax1',你有想法 – gg349

回答

0

如果你開始使用matplotlib的面向對象的接口,事情可能會更有意義。在這種情況下,你可以這樣做:

import matplotlib.pyplot as plt 

fig = plt.figure(figsize=(8, 6)) 
ax1 = fig.add_subplot(211) 
ax1.scatter(x1, y1, c = 'r', alpha = 0.3) 

ax2 = fig.add_subplot(212) 
ax2.scatter(x2, y2, c = 'k', alpha = 0.7) 

plt.show() 

通過這種方式,它很容易地看到,ax1ax2屬於數字實例,fig。然後,您可以稍後參考ax1ax2,在其上繪製更多數據,或調整軸限制或添加標籤等。

您還可以添加另一個圖形,並帶有其自己的一組子圖:

fig2 = plt.figure(figsize=(8, 6)) 
ax3 = fig2.add_subplot(211) 

然後你就可以在任何時候保存給定的數字,並且知道你總是指的是正確的數字:

fig.savefig('figure1.png') 
fig2.savefig('figure2.png') 
+1

我有點困惑,最後一行的目的是:plt.show()在你的例子中?將顯示2個子圖,不管我是否包含該行 – laszlopanaflex

+0

啊是的,因爲你有'%pylab inline'行,'plt.show'行不是必需的。如果您在非交互式環境中工作,則需要顯示這些圖 – tom

0

帶有含蓄的風格,問題用途(其中數字對象是保存在一個變量中,並在繪圖命令適用於當前的數字),你可以很容易地使一個上圖中目前的數字:

plt.figure(1) 

從而將重新激活圖1 plt.savefig()然後可以使用,另外情節可以在其中進行等

此外,你也可以給一個名稱,你的身材,當你創建它,然後引用它:

plt.figure("growth", figsize=…) 
… 
plt.figure("counts", figsize=…) 
… 
plt.figure("growth") # This figure becomes the active one again 

(圖中的參考參數被稱爲num,但它不一定是一個數字,can be a string,這使得代碼更清晰)。