2012-04-25 3 views
5

Ich muss einen Film erstellen. Nehmen wir an, ich schaffe eine Achse und Handlung auf sie etwas ganz besonders angefertigt:In Matlab Achse, wie nur die Daten unter Beibehaltung aller Achseneigenschaften zu aktualisieren?

figure; 
ax = plot(x, y, 'linewidth', 3, 'prop1', value1, 'prop2', value2, ...); 
grid minor; 
axis(ax, [xmin xmax ymin ymax]); 
legend(ax, ...); 
xlabel(ax, ...); 
ylabel(ax, ...); 
title(ax, ...); 

Jetzt laufe ich eine Schleife, wo nur die Werte von y aktualisiert werden.

for k = 1 : N 
% y changes, update the axis 
end 

Was ist der schnellste und einfachste Weg, um die Achse mit neuen y (oder x und y) zu aktualisieren, alle Achseneigenschaften zu halten?

Antwort

6

Eine schnelle Art und Weise ist die y-Werte der Daten zu einfach aktualisieren Sie habe geplottet:

%# note: plot returns the handle to the line, not the axes 
%# ax = gca returns the handle to the axes 
lineHandle = plot(x, y, 'linewidth', 3, 'prop1', value1, 'prop2', value2, ...); 

%# in the loop 
set(lineHandle,'ydata',newYdata) 

EDIT Was ist, wenn es mehrere Zeilen gibt, d. H. lineHandle ist ein Vektor? Sie können immer noch in einem Schritt aktualisieren; Sie müssen die Daten jedoch in ein Zellen-Array konvertieren.

%# make a plot with random data 
lineHandle = plot(rand(12)); 

%# create new data 
newYdata = randn(12); 
newYcell = mat2cell(newYdata,12,ones(1,12)); 

%# set new y-data. Make sure that there is a row in 
%# newYcell for each element in lineH (i.e. that it is a n-by-1 vector 
set(lineHandle,{'ydata'},newYcell(:)); 
+0

Danke, Jonas. Es klappt. Übrigens, wenn y eine Matrix ist, dann ist lineHandle ein Vektor, also rufe ich set (lineHandle (i), 'ydata', newYdata (:, i)) für jede Spalte auf, richtig? Oder gibt es einen Trick, um alle Spalten von y auf einmal zu aktualisieren? – Serg

+1

@Serg: Ja, da ist ein Trick. Siehe meine Bearbeitung. – Jonas

+0

vielen dank dafür. – Serg

0

Geben Sie einfach die Achse Griff zurück in nachfolgende Handlung Befehle

dh

plot(ax, ...) 

statt

ax = plot(...) 
+0

Entschuldigung, learnvst, aber es funktioniert nicht. plot (ax, ...) entfernt alle Achseneigenschaften – Serg

+0

@Serg: Wenn Sie 'hold all' vor dem nächsten Plotbefehl aufrufen, behalten Sie die alten Achseneigenschaften, aber auch die alte Linie. – Jonas

+0

@Jonas: Ich weiß, aber ich will nicht die alte Linie behalten. – Serg

Verwandte Themen