HOWTO · MATLAB

Como criar um gráfico animado no MATLAB

Aprenda a criar gráficos animados no MATLAB usando o comando drawnow e a função pause. Este guia fornece métodos passo a passo, exemplos práticos e dicas para visualizar dados de forma dinâmica. Melhore a apresentação dos seus dados e envolva o seu público com gráficos animados no MATLAB.

Nesta página

Use drawnow dentro de um loop para atualizar uma figura do MATLAB à medida que os dados mudam. Adicione pause() quando quiser um atraso visível; ela aceita segundos e não substitui a atualização dos gráficos. Os exemplos usam sintaxe compatível com o Octave, compartilhada com o MATLAB, e são fornecidos para adaptação; não estão incluídos resultados de execução destes exemplos.

Animar um gráfico do MATLAB com drawnow

Este exemplo revela uma curva senoidal da esquerda para a direita. O loop estende os dados plotados a cada iteração, axis mantém a visualização fixa e drawnow pede ao MATLAB que renderize a atualização. A linha azul e os rótulos facilitam acompanhar os dados em mudança. O título da figura e os rótulos dos eixos exibidos pelo código permanecem em inglês, porque o código e a sua saída são preservados sem alterações.

Execute este exemplo:

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

O primeiro ponto cria a figura antes do loop. Cada passagem posterior desenha a curva até o ponto atual. Altere o intervalo em x e o limite horizontal correspondente em axis juntos; altere os limites verticais quando os seus dados ficarem fora do intervalo atual. As opções de plot do MATLAB permitem ajustar a cor, o marcador e a espessura da linha.

Controlar o tempo da animação com pause

drawnow atualiza os gráficos exibidos; pause(seconds) atrasa o loop. Por exemplo, pause(0.05) solicita uma espera de 0,05 segundos a cada iteração. Um atraso menor pode fazer a animação parecer mais rápida e um atraso maior, mais lenta, mas o ritmo real também depende da computação e da renderização, portanto esse valor não garante uma taxa de quadros. Para exibir cada atualização sem um atraso deliberado, omita pause() e mantenha drawnow.

Animar várias séries de dados em uma única figura

Crie cada linha uma única vez e, em seguida, atualize os seus dados no loop. Isso mantém ambas as séries em um único eixo e evita recriar a legenda a cada passagem. Os rótulos da legenda distinguem as curvas seno e cosseno.

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 os seus próprios dados, substitua as duas expressões por matrizes de valores correspondentes e atualize ambas as linhas até o mesmo índice atual. Mantenha cores ou estilos de linha distintos e conserve uma legenda para que as séries permaneçam identificáveis.

Salvar ou estender a animação

No MATLAB, o VideoWriter pode salvar os quadros de uma animação como um vídeo. Abra um gravador para o arquivo de saída, capture cada quadro renderizado com getframe, passe-o para writeVideo e feche o gravador quando o loop terminar. Adapte a figura capturada e as configurações de saída à sua instalação do MATLAB; a gravação de vídeo depende do MATLAB e do perfil de vídeo selecionado, e esse fluxo de trabalho não é demonstrado pelos exemplos acima.

Para animar outro gráfico 2D, atualize os seus dados dentro do mesmo loop e chame drawnow. Mantenha limites de eixo fixos quando quiser uma visualização estável, ou recalcule-os quando os dados em mudança deverem determinar a visualização. Para uma linha 3D, use plot3 e atualize os dados x, y e z juntos.

FAQ

Como posso controlar a velocidade da animação?

Ajuste ou remova o atraso passado para pause(). Ele é medido em segundos, e o ritmo percebido também depende do tempo de computação e renderização.

Posso salvar um gráfico animado como vídeo?

Sim. O fluxo de trabalho VideoWriter do MATLAB captura quadros e os grava em um arquivo de vídeo; consulte Salvar ou estender a animação para ver as etapas e as notas de adaptação.

Posso fazer um gráfico animado em 3D?

Sim. Use plot3 e atualize os três vetores de coordenadas no loop, e depois chame drawnow para atualizar a figura.

Posso animar outros tipos de gráficos?

Sim. Atualize os dados ou o objeto gráfico de um gráfico de dispersão, um gráfico de barras ou outro gráfico compatível, e chame drawnow após a atualização. As propriedades do objeto que você altera dependem do tipo de gráfico.

Qual é a diferença entre drawnow e pause()?

O drawnow atualiza os gráficos para que as alterações apareçam na figura. O pause() aguarda uma duração em segundos. Use ambos quando precisar de atualizações visíveis com um atraso intencional.