2016-10-22 21 views
1

Ich habe eine Matlab-Funktion erstellt, die einen Graphen plottet. Wenn ich die Funktion mehrmals anrufe, möchte ich, dass alle Graphen in einer vorbereiteten Figur dargestellt werden. Stattdessen öffnet mein Code mit jeder Funktion die vorbereitete Figur in einem neuen Fenster mit nur einem Graphen.Wie mehrere Funktionsaufrufe in einer Figur dargestellt werden

Meine Funktion sieht wie folgt aus

function myfunction(x,y) 

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

figure(myfigure); 
plot(x,y) 

end 

Mit der if-Funktion, die ich versuchte, es zu verhindern, dass ein neues Figur-Fenster zu öffnen, wenn myfigure allready geöffnet wird. Aber es scheint, als würde Matlab die if-Funktion einfach ignorieren. Selbst der Assignin hat nicht geholfen. Obwohl im Befehlsfenster überprüft, zeigte, dass vorhanden ('myfigure') seinen Wert ändert. Ich weiß wirklich nicht warum die If-Funktion von Matlab ignoriert wird. Haben Sie irgendwelche Vorschläge, wie Sie dies beheben können

Antwort

0

Das Problem hier ist exist kann die vorherige Abbildung nicht sehen, weil es Handle gelöscht wird, wenn der vorherige Aufruf der Funktion beendet wurde. Mein Vorschlag ist, wie folgt:

Geben Sie die Zahl Griff in die Funktion und auch als Ausgang zurück:

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 

Hier ist ein Beispielcode für das:

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... 

Beachten Sie, dass Sie nur müssen beim ersten Anruf myfunction ausgegeben werden, dann können Sie es weiter verwenden, bis Sie die Figur löschen.

+0

Hallo @EBH, beim ersten Funktionsaufruf ist "meineFigur" nicht geöffnet oder definiert. Das könnte also nicht für mich funktionieren. Ich habe mir jetzt geholfen, indem ich den Zahlencode in der Funktion weggelassen habe. Es muss jedes Mal zusätzlich mit der Funktion auf diese Weise eingegeben werden. – crx

+0

@crx Ich verstehe. Schau dir meinen Schnitt an. – EBH

+0

Vielen Dank für Ihre Antwort. Das ist absolut das, wonach ich gesucht habe. Mein Upvote siehst du vielleicht nicht, weil ich weniger Reputationspunkte habe. Eine Bemerkung für andere: nach "plot" in der Funktion musste ich "Hold on" hinzufügen und du migth tan (x) nicht benutzen, weil es bei x = 0 unendlich wird. – crx

0

Die Funktion figure, die Sie verwendet haben, ist wahrscheinlich, warum es eine neue Figur öffnet.

Was Sie vielleicht tun möchten, ist einfach die aktuellen Achsen und plotten Sie darin.

So würde Ihre Funktion so aussehen

function myfunction(x,y) 

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

end 

Dies würde funktionieren, wenn Sie nur eine aktive Figur und Achsen haben, wenn Sie mehr als Sie die Achsen Griff an die Funktion übergeben mihgt wollen.

+0

Entschuldigung, ich habe nicht innerhalb eines engen Zeitrahmens geantwortet. – crx

+0

Ihr Vorschlag funktioniert nicht für mein Problem, da ich ein Dreiecksdiagramm erstellt habe, um trinäre Datensätze zu zeichnen und somit mehr als die Achsen benötigen. – crx

Verwandte Themen