HOWTO · MATLAB

Cómo crear un gráfico animado en MATLAB

Aprenda a crear gráficos animados en MATLAB con el comando drawnow y la función pause. Esta guía ofrece métodos paso a paso, ejemplos prácticos y consejos para visualizar datos de forma dinámica. Mejore la presentación de sus datos y capte la atención de su audiencia con gráficos animados en MATLAB.

En esta página

Use drawnow dentro de un bucle para actualizar una figura de MATLAB a medida que cambian los datos. Añada pause() cuando desee un retraso visible; acepta segundos y no sustituye la actualización de los gráficos. Los ejemplos usan una sintaxis compatible con Octave, compartida con MATLAB, y se proporcionan para su adaptación; no se incluyen resultados de ejecución de estos ejemplos.

Animar un gráfico de MATLAB con drawnow

Este ejemplo revela una curva sinusoidal de izquierda a derecha. El bucle amplía los datos representados en cada iteración, axis mantiene fija la vista y drawnow pide a MATLAB que renderice la actualización. La línea azul y las etiquetas facilitan el seguimiento de los datos cambiantes. El título de la figura y las etiquetas de los ejes que muestra el código permanecen en inglés, porque el código y su salida se conservan sin cambios.

Ejecute este ejemplo:

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

El primer punto crea la figura antes del bucle. Cada pasada posterior dibuja la curva hasta el punto actual. Cambie el intervalo en x y el límite horizontal correspondiente en axis a la vez; cambie los límites verticales cuando sus datos queden fuera del intervalo actual. Las opciones de plot de MATLAB le permiten ajustar el color, el marcador y el grosor de la línea.

Controlar el tiempo de la animación con pause

drawnow actualiza los gráficos mostrados; pause(seconds) retrasa el bucle. Por ejemplo, pause(0.05) solicita una espera de 0,05 segundos en cada iteración. Un retraso más corto puede hacer que la animación parezca más rápida y uno más largo, más lenta, pero el ritmo real también depende del cálculo y la renderización, por lo que este valor no garantiza una velocidad de fotogramas. Para mostrar cada actualización sin un retraso deliberado, omita pause() y mantenga drawnow.

Animar varias series de datos en una figura

Cree cada línea una vez y luego actualice sus datos en el bucle. Así, ambas series se mantienen en un mismo eje y se evita recrear la leyenda en cada pasada. Las etiquetas de la leyenda distinguen las curvas seno y 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');

Para sus propios datos, sustituya las dos expresiones por matrices de valores coincidentes y actualice ambas líneas hasta el mismo índice actual. Mantenga colores o estilos de línea distintos y conserve una leyenda para que las series sigan siendo identificables.

Guardar o ampliar la animación

En MATLAB, VideoWriter puede guardar los fotogramas de una animación como un vídeo. Abra un escritor para el archivo de salida, capture cada fotograma renderizado con getframe, páselo a writeVideo y cierre el escritor cuando termine el bucle. Adapte la figura capturada y los ajustes de salida a su instalación de MATLAB; la escritura de vídeo depende de MATLAB y del perfil de vídeo seleccionado, y este flujo de trabajo no se demuestra en los ejemplos anteriores.

Para animar otro gráfico 2D, actualice sus datos dentro del mismo bucle y llame a drawnow. Mantenga límites de eje fijos cuando desee una vista estable, o recalcule los límites cuando los datos cambiantes deban determinar la vista. Para una línea 3D, use plot3 y actualice los datos x, y y z a la vez.

FAQ

¿Cómo puedo controlar la velocidad de la animación?

Ajuste o elimine el retraso pasado a pause(). Se mide en segundos, y el ritmo percibido también depende del tiempo de cálculo y renderización.

¿Puedo guardar un gráfico animado como un vídeo?

Sí. El flujo de trabajo VideoWriter de MATLAB captura fotogramas y los escribe en un archivo de vídeo; consulte Guardar o ampliar la animación para ver los pasos y las notas de adaptación.

¿Puedo hacer un gráfico animado en 3D?

Sí. Use plot3 y actualice las tres matrices de coordenadas en el bucle; luego llame a drawnow para actualizar la figura.

¿Puedo animar otros tipos de gráficos?

Sí. Actualice los datos o el objeto gráfico de un gráfico de dispersión, un gráfico de barras u otro gráfico compatible, y llame a drawnow después de la actualización. Las propiedades del objeto que cambie dependerán del tipo de gráfico.

¿Cuál es la diferencia entre drawnow y pause()?

drawnow actualiza los gráficos para que los cambios aparezcan en la figura. pause() espera una duración en segundos. Use ambos cuando necesite actualizaciones visibles con un retraso intencionado.