2016-10-22 141 views
1

我做了一個繪製圖的matlab函數。當我多次調用該函數時,我希望它將所有圖形繪製在一張準備好的圖中。但是相反,我的代碼隨着每個函數打開,在一個只有一個Graph的新窗口中調用準備好的圖形。如何在一個圖中繪製幾個函數調用

我的功能看起來像這樣

function myfunction(x,y) 

if ~exist('myfigure') 
    myfigure = openfig('myfigure.fig') 
    assignin('base', 'myfigure',myfigure) 
end 

figure(myfigure); 
plot(x,y) 

end 

與IF函數我試圖阻止它打開一個新的數字窗口,當myfigure被媒體鏈接打開。但是,似乎Matlab只是忽略了if函數,令我驚訝。即使是Assignin也沒有幫忙。雖然在命令窗口中檢查,但顯示存在('myfigure')更改其值。 我真的不知道爲什麼if函數被Matlab忽略。您有任何建議如何解決這個問題

回答

0

這裏的問題是exist無法看到上圖,因爲當前面的函數調用結束時,它的句柄被刪除。我的建議是如下:

傳遞數字手柄的功能,並且也返回它的輸出:

function myfigure = myfunction(x,y,myfigure) 
if nargin<3 % if you pass 2 variables or less 
    myfigure = figure; % create a figure 
else 
    figure(myfigure); % otherwise use the one in handle 
end 
plot(x,y) 
end 

這裏是一個示例代碼:

x = 0:0.01:2*pi; 
myfigure = myfunction(x,sin(x)); %first call 
myfunction(x,cos(x),myfigure); % second call 
myfunction(x,tan(x),myfigure); % third call... 

請注意,您只在第一次通話中需要輸出myfunction,那麼您可以繼續使用它,直到刪除該數字。

+0

你好@EBH,第一個函數調用「myfigure」沒有打開或定義。所以這對我不起作用。我現在通過省略函數中的數字代碼來幫助我。除此之外,每次都必須輸入此功能。 – crx

+0

@crx我明白了。看看我的編輯。 – EBH

+0

謝謝你的回答。這就是我一直在尋找的東西。我的upvote你也許看不到因爲我有較少的聲望點。對其他人的一個評論:在函數「plot」之後,我必須添加「hold on」,並且你不會使用tan(x)進行測試,因爲它在x = 0時變成無限大。 – crx

0

您使用的功能figure可能是爲什麼它打開一個新的數字。

您可能想要做的只是獲取當前軸並在其中繪製。

所以,你的功能應該是這樣

function myfunction(x,y) 

myaxes = gca; 
plot(myaxes,x,y) 

end 

,這將工作,如果你只有一個活躍的身影和斧頭,如果你有比你更mihgt想通過軸手柄的功能。

+0

對不起,我沒有在狹窄的時間範圍內回答。 – crx

+0

您的建議不適用於我的問題,因爲我準備了一個三角形圖繪製三角形數據集,因此需要比軸更多。 – crx

相關問題