HOWTO · MATLAB
So erstellen Sie einen animierten Plot in MATLAB
Erfahren Sie, wie Sie mit dem Befehl drawnow und der Funktion pause animierte Plots in MATLAB erstellen. Diese Anleitung bietet Schritt-für-Schritt-Methoden, praktische Beispiele und Tipps zur dynamischen Visualisierung von Daten. Verbessern Sie Ihre Datenpräsentation und begeistern Sie Ihr Publikum mit animierten Plots in MATLAB.
Auf dieser Seite
Verwenden Sie drawnow innerhalb einer Schleife, um eine MATLAB-Figur zu aktualisieren, während sich die Daten ändern. Fügen Sie pause() hinzu, wenn Sie eine sichtbare Verzögerung wünschen; die Funktion akzeptiert Sekunden und ersetzt nicht die Aktualisierung der Grafiken. Die Beispiele verwenden eine Octave-kompatible Syntax, die mit MATLAB geteilt wird, und sind zur Anpassung gedacht; es liegen keine Ausführungsergebnisse für sie vor.
Einen MATLAB-Plot mit drawnow animieren
Dieses Beispiel zeigt eine Sinuskurve, die von links nach rechts aufgebaut wird. Die Schleife erweitert die geplotteten Daten in jeder Iteration, axis hält die Ansicht fest, und drawnow weist MATLAB an, die Aktualisierung darzustellen. Die blaue Linie und die Beschriftungen machen die sich ändernden Daten leicht nachvollziehbar. Der vom Code angezeigte Figurentitel und die Achsenbeschriftungen bleiben auf Englisch, da Code und Ausgabe unverändert übernommen werden.
Führen Sie dieses Beispiel aus:
x = 0:0.1:10;
y = sin(x);
warning('off', 'Octave:gnuplot-graphics');
figure;
plot(x(1), y(1), 'b-');
axis([0 10 -1 1]);
title('Animating a Sine Wave');
xlabel('X');
ylabel('sin(X)');
for k = 2:length(x)
plot(x(1:k), y(1:k), 'b-');
axis([0 10 -1 1]);
title('Animating a Sine Wave');
xlabel('X');
ylabel('sin(X)');
drawnow;
pause(0.02);
end
fprintf(1, 'Animation complete.\n');
Der erste Punkt erstellt die Figur vor der Schleife. Jeder weitere Durchlauf zeichnet die Kurve bis zum aktuellen Punkt. Ändern Sie den Bereich in x und die passende horizontale Grenze in axis gemeinsam; ändern Sie die vertikalen Grenzen, wenn Ihre Daten außerhalb des aktuellen Bereichs liegen. Mit den plot-Optionen von MATLAB können Sie Linienfarbe, Marker und Linienstärke anpassen.
Das Animationstempo mit pause steuern
drawnow aktualisiert die angezeigte Grafik; pause(seconds) verzögert die Schleife. So fordert pause(0.05) bei jeder Iteration eine Wartezeit von 0,05 Sekunden an. Eine kürzere Verzögerung kann die Animation schneller und eine längere langsamer erscheinen lassen, aber das tatsächliche Tempo hängt auch von Berechnung und Darstellung ab, sodass dieser Wert keine Bildrate garantiert. Um jede Aktualisierung ohne absichtliche Verzögerung anzuzeigen, lassen Sie pause() weg und behalten Sie drawnow bei.
Mehrere Datenreihen in einer Figur animieren
Erstellen Sie jede Linie einmal und aktualisieren Sie dann ihre Daten in der Schleife. So bleiben beide Reihen in einem Achsenbereich und die Legende muss nicht bei jedem Durchlauf neu erstellt werden. Die Legendenbeschriftungen unterscheiden die Sinus- und die Kosinuskurve.
x = 0:0.1:10;
warning('off', 'Octave:gnuplot-graphics');
figure;
hold on;
sine_line = plot(x(1), sin(x(1)), 'b-', 'LineWidth', 2);
cosine_line = plot(x(1), cos(x(1)), 'r-', 'LineWidth', 2);
axis([0 10 -1 1]);
title('Sine and Cosine');
xlabel('X');
ylabel('Value');
legend('Sine', 'Cosine');
for k = 2:length(x)
set(sine_line, 'XData', x(1:k), 'YData', sin(x(1:k)));
set(cosine_line, 'XData', x(1:k), 'YData', cos(x(1:k)));
drawnow;
pause(0.02);
end
hold off;
fprintf(1, 'Animation complete with two series.\n');
Ersetzen Sie für Ihre eigenen Daten die beiden Ausdrücke durch Arrays mit übereinstimmenden Werten und aktualisieren Sie beide Linien bis zum selben aktuellen Index. Behalten Sie unterschiedliche Farben oder Linienstile bei und behalten Sie eine Legende, damit die Reihen erkennbar bleiben.
Die Animation speichern oder erweitern
In MATLAB kann VideoWriter Frames einer Animation als Video speichern. Öffnen Sie einen Writer für die Ausgabedatei, erfassen Sie jeden gerenderten Frame mit getframe, übergeben Sie ihn an writeVideo und schließen Sie den Writer, wenn die Schleife endet. Passen Sie die erfasste Figur und die Ausgabeeinstellungen an Ihre MATLAB-Installation an; das Schreiben von Videos hängt von MATLAB und dem gewählten Videoprofil ab, und dieser Arbeitsablauf wird durch die obigen Beispiele nicht demonstriert.
Um einen anderen 2D-Plot zu animieren, aktualisieren Sie seine Daten in derselben Schleife und rufen Sie drawnow auf. Behalten Sie feste Achsengrenzen bei, wenn Sie eine stabile Ansicht wünschen, oder berechnen Sie sie neu, wenn die sich ändernden Daten die Ansicht bestimmen sollen. Für eine 3D-Linie verwenden Sie plot3 und aktualisieren die x-, y- und z-Daten gemeinsam.
FAQ
Wie kann ich die Animationsgeschwindigkeit steuern?
Passen Sie die an pause() übergebene Verzögerung an oder entfernen Sie sie. Sie wird in Sekunden gemessen, und das wahrgenommene Tempo hängt auch von der Berechnungs- und Darstellungszeit ab.
Kann ich einen animierten Plot als Video speichern?
Ja. Der VideoWriter-Arbeitsablauf von MATLAB erfasst Frames und schreibt sie in eine Videodatei; die Schritte und Anpassungshinweise finden Sie unter Die Animation speichern oder erweitern.
Kann ich einen animierten 3D-Plot erstellen?
Ja. Verwenden Sie plot3, aktualisieren Sie alle drei Koordinatenarrays in der Schleife und rufen Sie dann drawnow auf, um die Figur zu aktualisieren.
Kann ich andere Plottypen animieren?
Ja. Aktualisieren Sie die Daten oder das Grafikobjekt für ein Streudiagramm, ein Balkendiagramm oder einen anderen unterstützten Plot und rufen Sie nach der Aktualisierung drawnow auf. Die Eigenschaften, die Sie ändern, hängen vom Plottyp ab.
Was ist der Unterschied zwischen drawnow und pause()?
drawnow aktualisiert die Grafik, damit Änderungen in der Figur erscheinen. pause() wartet eine Dauer in Sekunden. Verwenden Sie beides, wenn Sie sichtbare Aktualisierungen mit einer absichtlichen Verzögerung benötigen.