2017-11-30 4 views
1

Ich möchte Daten, die in einem Array gespeichert ist, plotten. A enthält drei Spalten, jede Spalte repräsentiert einen anderen Datensatz. Der folgende Code funktioniert:MATLAB - Aktualisieren Plot mit Matrix

A = [0 0 0; 
    0 1 0]; 
h = plot(A) 

jedoch eine neue Linie zu A angehängt wird und die Handlung wird aktualisiert. Ich habe gelesen, dass Sie Plots mit set und 'XData' aktualisieren können:

A = [0 0 0; 
    0 1 0; 
    1 2 0]; 
set(h,'XData',A) 

Dies wirft mir einen Fehler: Fehler mit gesetzt. Wert muss ein Spalten- oder Zeilenvektor sein. Gibt es eine Möglichkeit, die Daten anstelle eines neuen Diagramms zu aktualisieren? Das folgende funktioniert gut?

A = [0 0 0; 
    0 1 0; 
    1 2 0]; 
h = plot(A) 

Antwort

4

der Anfangscode

A = [0 0 0; 
    0 1 0]; 
h = plot(A) 

erzeugt drei Linienobjekte, eines für jede Spalte von A (überprüfen, dass h Größe 3 × 1 hat). Sie müssen also jede dieser Zeilen in einer Schleife aktualisieren. Außerdem müssen Sie sowohl die 'XData' und 'YData' Eigenschaften aktualisieren:

for k = 1:numel(h) 
    set(h(k), 'XData', 1:size(A,1), 'YData', A(:,k)) 
end 
2

Sie Linkdata verwenden könnte (https://mathworks.com/help/matlab/ref/linkdata.html):

A = [ 
    0 0 0; 
    0 1 0 
]; 

plot(A); 
linkdata on; 

A = [ 
    0 0 0; 
    0 1 0; 
    1 2 0 
]; 

Ein weiterer Ansatz, um die Handlung zu löschen und neu zu zeichnen sie sofort nach:

h = plot(x,y); 

% modify data... 

delete(h); 
h = plot(x,y);