2012-07-18 618 views
2

我有一個帶3軸組件的Matlab GUI。他們的標籤是predicted_ax,cost_axerror_ax。我想在第一軸組件(帶有標記predicted_ax)的特定位置繪製垂直線。我怎麼做?如何在Matlab GUI中在軸上繪製垂直線?

我試過這段代碼:

ylim = get(handles.predicted_ax, 'ylim'); 
line([linePos, linePos], ylim); 

但它繪製(那些與標籤error_ax)不同軸上行了!我相信我沒有混淆標籤或軸組件。在事實上另一個測試

ylim = get(handles.cost_ax, 'ylim'); 
line([linePos, linePos], ylim); 

給出完全相同的結果:繪製直線的最後一個組件的軸與標籤error_ax。那麼我該如何在右側的軸上畫線?

回答

3

您需要設置該行的「父」屬性,默認情況下它會一直是當前軸:

h = line([linePos, linePos], ylim); 
set(h, 'parent', handles.predicted_ax); 
+0

這是最好的答案。每條線都有一個父軸。如果您不提供帶有軸手柄的line()函數,則默認情況下會將該線附加到「當前」軸。這就是爲什麼軸(handles.predicted_ax)有效。它使predict_ax成爲當前座標軸,因此之後創建的任何行都將其作爲默認父項。但是,我覺得只需將該行的「Parent」屬性設置爲要附加到的軸就會更清晰。一般來說,當您有更清晰的選項可用時,依靠使用當前座標軸(gca)或當前圖(gcf)並不是一個好主意。 – cholland 2012-07-18 23:01:40

+2

作爲一個側面說明。你可以這樣做:'line([linePos,linePos],ylim,'Parent',handles.predicted_ax)' – cholland 2012-07-18 23:02:27

+0

@cholland這將是最好的答案,如果它的工作。但事實並非如此。 – drasto 2012-07-19 09:57:24

1

我認爲您需要使用axes命令來設置繪製線條的當前座標軸。在您的line命令之前嘗試axes(handles.predicted_ax);

(獲取的軸ylim價值顯然不讓它電流)。

+0

+1它的工作原理,謝謝! – drasto 2012-07-18 22:26:42