2013-06-13 44 views
4

如何繪製到matplotlib中的特定軸?我創建了自己的對象,它有自己的繪圖方法,並採用標準參數和kwargs來調整線條的顏色,寬度等,我也想繪製到特定的座標軸。繪製到Matplotlib中的特定軸

我看到有一個軸屬性接受一個Axes對象,但不管它還只繪製到最後創建的座標軸。

這裏是什麼,我想

fig, ax = subplots(2, 1) 

s = my_object() 
t = my_object() 

s.plot(axes=ax[0]) 
t.plot(axes=ax[1]) 
+0

我建議你閱讀本:http://stackoverflow.com/questions/14254379/how-can-i-attach-a-pyplot-函數對圖的實例/ 14261698#14261698 – tacaswell

回答

5

正如我在評論中所說的,請閱讀 How can I attach a pyplot function to a figure instance?以獲得解釋OO和狀態機界面與matplotlib之間的區別。

你應該修改你的繪圖功能是類似

def plot(..., ax=None, **kwargs): 
    if ax is None: 
     ax = gca() 
    ax.plot(..., **kwargs) 
+0

謝謝,這很接近我最終做的。你能告訴我爲什麼有一個軸屬性?設置此屬性應根據文檔將線藝術家與該軸相關聯,但我沒有看到。 – dvreed77

+0

我認爲這是文檔生成方式的一個神器,'Line2D'對象具有'axes'屬性,但是它由'plot'中的代碼設置,並且您傳入的值將被忽略。你能指出我的文件說它應該有這種行爲嗎? – tacaswell

1

您可以使用特定的軸的繪圖功能的例子:

import matplotlib.pyplot as plt 
from scipy import sin, cos 
f, ax = plt.subplots(2,1) 
x = [1,2,3,4,5,6,7,8,9] 
y1 = sin(x) 
y2 = cos(x) 
plt.sca(ax[0]) 
plt.plot(x,y1) 
plt.sca(ax[1]) 
plt.plot(x,y2) 
plt.show() 

這應該繪製兩個不同的次要情節。

+0

是的,我明白我可以這樣做,但這不適用於我的類定義中的plot函數。我想我可以手動查看是否設置了軸屬性,但我想我爲什麼繪圖函數如果不能繪製到該軸上的軸屬性會感到困惑。 – dvreed77

+0

我已編輯示例以使用函數sca()來設置當前的活動軸。它應該與正常的情節功能一起工作,以便您可以在班級中使用該功能。 – Harpe

+0

你的班級的情節功能如何工作?對我來說,你的例子對'matplotlib.pyplot'的plot命令工作正常。該圖是在指定的軸上進行的。 –