2016-10-22 22 views
1

グラフをプロットするmatlab関数を作った。この関数を何度か呼び出すと、すべてのグラフを1つの準備された図形にプロットする必要があります。しかし、代わりに私のコードが開き、すべての関数が準備されたFigureを新しいウィンドウで呼び出し、そこにグラフが1つだけ表示されます。複数の関数呼び出しを1つの図にプロットする方法

My機能は、私はmyfigureが出回っ開かれたときに、新しいフィギュアウィンドウを開いてからそれを防ぐためにしようとした場合、機能を持つこの

function myfunction(x,y) 

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

figure(myfigure); 
plot(x,y) 

end 

のように見えます。しかし、Matlabは私の驚きのためにif関数を無視しているようです。アサインダーは助けてくれなかった。コマンドウィンドウをチェックしても、存在すること( 'myfigure')がその値を変更することが示されました。 私は本当になぜif-functionがMatlabによって無視されるのか分かりません。これを修正する方法を教えてください

答えて

0

ここでの問題はexistです。前の図は表示されません。これは、以前の関数呼び出しが終了したときにハンドルが削除されるためです。私の提案は以下の通りです:

は、関数にFigureハンドルを渡すことはなく、また、出力としてそれを返す:ここ

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

Hello @EBH、最初の関数呼び出しで "myfigure"が開いていないか、定義されていません。だから、これは私にとってはうまくいかない。私は今、関数内のFigureコードを省略して私を助けました。このように関数に加えて毎回入力する必要があります。 – crx

+0

@crx参照してください。私の編集を見てください。 – EBH

+0

あなたの答えをありがとう。それは私が探していたものです。私のアップヴォートは、私が評判のポイントが少ないために見えないかもしれません。他の人のための一つの発言:私は "保留"を追加しなければならなかった関数の "プロット"の後に、あなたはx = 0で無限になるためテストのためにtan(x)を使わないで移動する。 – crx

0

使用した関数figureはおそらく新しい図形を開く理由です。

あなたがしたいことは、現在の軸とプロットを取得するだけです。

だからあなたの関数は、あなたが唯一の有効数字と軸を持っている場合、あなたは軸が関数に扱う渡したいmihgt以上のものを持っている場合、これは、働くだろう。この

function myfunction(x,y) 

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

end 

ようになります。

+0

申し訳ありません申し訳ありませんが、狭い期間内に回答しませんでした。 – crx

+0

あなたの提案は私の問題では機能しません。なぜなら私は三角形の図をプロットして三角形のデータセットを作成し、それ以上の軸を必要とするからです。 – crx

関連する問題