HOWTO · MATLAB
MATLAB에서 애니메이션 플롯을 만드는 방법
drawnow 명령과 pause 함수를 사용하여 MATLAB에서 애니메이션 플롯을 만드는 방법을 알아보세요. 이 가이드에서는 단계별 방법, 실용적인 예제, 그리고 데이터를 동적으로 시각화하기 위한 팁을 제공합니다. MATLAB의 애니메이션 플롯으로 데이터 프레젠테이션을 개선하고 청중의 관심을 사로잡으세요.
이 페이지의 내용
루프 안에서 drawnow를 사용하면 데이터가 변경될 때 MATLAB 피겨를 새로 고칠 수 있습니다. 눈에 보이는 지연이 필요하면 pause()를 추가하세요. pause()는 초 단위 값을 받으며 그래픽 업데이트를 대체하지는 않습니다. 예제는 MATLAB과 공유되는 Octave 호환 구문을 사용하며 응용할 수 있도록 제공됩니다. 이 패킷에는 해당 예제들의 실행 결과가 포함되어 있지 않습니다.
drawnow로 MATLAB 플롯에 애니메이션 적용하기
이 예제는 사인 곡선을 왼쪽에서 오른쪽으로 드러냅니다. 루프는 반복할 때마다 플롯되는 데이터를 확장하고, axis는 보기를 고정하며, drawnow는 MATLAB에 업데이트를 렌더링하도록 지시합니다. 파란색 선과 레이블 덕분에 변화하는 데이터를 쉽게 따라갈 수 있습니다. 코드가 표시하는 피겨 제목과 축 레이블은 코드와 출력이 변경되지 않은 채로 유지되므로 영어로 남아 있습니다.
이 예제를 실행하세요:
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');
첫 번째 점이 루프 전에 피겨를 만듭니다. 이후의 각 반복은 현재 점까지의 곡선을 그립니다. x의 범위와 axis의 해당 수평 제한을 함께 변경하세요. 데이터가 현재 범위를 벗어나는 경우 수직 제한을 변경하세요. MATLAB의 plot 옵션을 사용하면 선 색상, 마커, 선 너비를 조정할 수 있습니다.
pause로 애니메이션 타이밍 제어하기
drawnow는 표시되는 그래픽을 업데이트하고, pause(seconds)는 루프를 지연시킵니다. 예를 들어 pause(0.05)는 반복마다 0.05초의 대기를 요청합니다. 지연이 짧으면 애니메이션이 더 빠르게 보이고 길면 더 느리게 보일 수 있지만, 실제 속도는 계산과 렌더링에도 좌우되므로 이 값이 프레임 속도를 보장하지는 않습니다. 의도적인 지연 없이 각 업데이트를 표시하려면 pause()를 생략하고 drawnow를 유지하세요.
하나의 피겨에서 여러 데이터 계열에 애니메이션 적용하기
각 선을 한 번만 만든 다음 루프에서 그 데이터를 업데이트하세요. 이렇게 하면 두 계열이 하나의 축 안에 유지되고 반복할 때마다 범례를 다시 만들 필요가 없습니다. 범례 레이블은 사인 곡선과 코사인 곡선을 구분합니다.
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');
자신의 데이터를 사용하려면 두 식을 일치하는 값의 배열로 바꾸고 두 선을 모두 같은 현재 인덱스까지 업데이트하세요. 서로 다른 색상이나 선 스타일을 유지하고 범례를 유지하여 계열을 식별할 수 있게 하세요.
애니메이션 저장 또는 확장하기
MATLAB에서는 VideoWriter를 사용하여 애니메이션의 프레임을 비디오로 저장할 수 있습니다. 출력 파일에 대한 라이터를 열고, getframe으로 렌더링된 각 프레임을 캡처한 뒤, writeVideo에 전달하고, 루프가 끝나면 라이터를 닫습니다. 캡처하는 피겨와 출력 설정을 사용 중인 MATLAB 설치에 맞게 조정하세요. 비디오 쓰기는 MATLAB과 선택한 비디오 프로필에 따라 달라지며, 이 워크플로는 위의 예제에서 시연되지 않습니다.
다른 2D 플롯에 애니메이션을 적용하려면 같은 루프 안에서 그 데이터를 업데이트하고 drawnow를 호출하세요. 안정적인 보기를 원하면 축 제한을 고정하고, 변화하는 데이터가 보기를 결정하게 하려면 제한을 다시 계산하세요. 3D 선의 경우 plot3를 사용하고 x, y, z 데이터를 함께 업데이트하세요.
FAQ
애니메이션 속도를 어떻게 제어할 수 있나요?
pause()에 전달하는 지연을 조정하거나 제거하세요. 지연은 초 단위로 측정되며, 체감 속도는 계산 및 렌더링 시간에도 좌우됩니다.
애니메이션 플롯을 비디오로 저장할 수 있나요?
예. MATLAB의 VideoWriter 워크플로는 프레임을 캡처하여 비디오 파일에 씁니다. 단계와 조정 참고 사항은 애니메이션 저장 또는 확장하기를 참조하세요.
3D 애니메이션 플롯을 만들 수 있나요?
예. plot3를 사용하고 루프에서 세 좌표 배열을 모두 업데이트한 다음 drawnow를 호출하여 피겨를 새로 고치세요.
다른 플롯 유형에도 애니메이션을 적용할 수 있나요?
예. 산점도, 막대 차트 또는 기타 지원되는 플롯의 데이터나 그래픽 객체를 업데이트하고, 업데이트 후 drawnow를 호출하세요. 변경하는 객체 속성은 플롯 유형에 따라 달라집니다.
drawnow와 pause()의 차이점은 무엇인가요?
drawnow는 그래픽을 새로 고쳐 변경 사항이 피겨에 나타나게 합니다. pause()는 초 단위의 시간 동안 대기합니다. 의도적인 지연과 함께 눈에 보이는 업데이트가 필요할 때 두 가지를 모두 사용하세요.