HOWTO · MATLAB

Come creare un grafico animato in MATLAB

Scopri come creare grafici animati in MATLAB utilizzando il comando drawnow e la funzione pause. Questa guida fornisce metodi passo passo, esempi pratici e suggerimenti per visualizzare i dati in modo dinamico. Migliora la presentazione dei tuoi dati e coinvolgi il pubblico con i grafici animati in MATLAB.

In questa pagina

Usa drawnow all’interno di un ciclo per aggiornare una figura MATLAB man mano che i dati cambiano. Aggiungi pause() quando desideri un ritardo visibile; accetta valori in secondi e non sostituisce l’aggiornamento della grafica. Gli esempi utilizzano una sintassi compatibile con Octave, condivisa con MATLAB, e sono forniti per essere adattati; non sono inclusi risultati di esecuzione per questi esempi.

Animare un grafico MATLAB con drawnow

Questo esempio rivela una curva sinusoidale da sinistra a destra. Il ciclo estende i dati tracciati a ogni iterazione, axis mantiene fissa la vista e drawnow chiede a MATLAB di renderizzare l’aggiornamento. La linea blu e le etichette rendono facile seguire i dati che cambiano. Il titolo della figura e le etichette degli assi mostrati dal codice restano in inglese, perché il codice e il suo output vengono conservati senza modifiche.

Esegui questo esempio:

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');

Il primo punto crea la figura prima del ciclo. Ogni passaggio successivo disegna la curva fino al punto corrente. Modifica insieme l’intervallo in x e il limite orizzontale corrispondente in axis; modifica i limiti verticali quando i tuoi dati escono dall’intervallo corrente. Le opzioni di plot di MATLAB ti consentono di regolare il colore, il marcatore e lo spessore della linea.

Controllare i tempi dell’animazione con pause

drawnow aggiorna la grafica visualizzata; pause(seconds) ritarda il ciclo. Ad esempio, pause(0.05) richiede un’attesa di 0,05 secondi a ogni iterazione. Un ritardo più breve può far sembrare l’animazione più veloce e uno più lungo più lenta, ma il ritmo effettivo dipende anche dal calcolo e dal rendering, quindi questo valore non garantisce una frequenza dei fotogrammi. Per mostrare ogni aggiornamento senza un ritardo intenzionale, ometti pause() e mantieni drawnow.

Animare più serie di dati in un’unica figura

Crea ogni linea una sola volta, quindi aggiorna i suoi dati nel ciclo. In questo modo entrambe le serie restano in un unico asse e si evita di ricreare la legenda a ogni passaggio. Le etichette della legenda distinguono le curve seno e coseno.

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');

Per i tuoi dati, sostituisci le due espressioni con array di valori corrispondenti e aggiorna entrambe le linee fino allo stesso indice corrente. Mantieni colori o stili di linea distinti e conserva una legenda in modo che le serie restino identificabili.

Salvare o estendere l’animazione

In MATLAB, VideoWriter può salvare i fotogrammi di un’animazione come video. Apri un writer per il file di output, acquisisci ogni fotogramma renderizzato con getframe, passalo a writeVideo e chiudi il writer al termine del ciclo. Adatta la figura acquisita e le impostazioni di output alla tua installazione di MATLAB; la scrittura dei video dipende da MATLAB e dal profilo video selezionato, e questo flusso di lavoro non è dimostrato dagli esempi precedenti.

Per animare un altro grafico 2D, aggiorna i suoi dati all’interno dello stesso ciclo e chiama drawnow. Mantieni limiti degli assi fissi quando desideri una vista stabile, oppure ricalcolali quando devono essere i dati che cambiano a determinare la vista. Per una linea 3D, usa plot3 e aggiorna insieme i dati x, y e z.

FAQ

Come posso controllare la velocità dell’animazione?

Regola o rimuovi il ritardo passato a pause(). È misurato in secondi e il ritmo percepito dipende anche dai tempi di calcolo e rendering.

Posso salvare un grafico animato come video?

Sì. Il flusso di lavoro VideoWriter di MATLAB acquisisce i fotogrammi e li scrive in un file video; consulta Salvare o estendere l’animazione per i passaggi e le note di adattamento.

Posso creare un grafico animato in 3D?

Sì. Usa plot3 e aggiorna tutti e tre gli array di coordinate nel ciclo, quindi chiama drawnow per aggiornare la figura.

Posso animare altri tipi di grafico?

Sì. Aggiorna i dati o l’oggetto grafico di un grafico a dispersione, di un grafico a barre o di un altro grafico supportato, e chiama drawnow dopo l’aggiornamento. Le proprietà dell’oggetto che modifichi dipendono dal tipo di grafico.

Qual è la differenza tra drawnow e pause()?

drawnow aggiorna la grafica in modo che le modifiche appaiano nella figura. pause() attende per una durata in secondi. Usali entrambi quando hai bisogno di aggiornamenti visibili con un ritardo intenzionale.