본문 바로가기
매트랩(Matlab)/매트랩 질문모음

[Matlab / 매트랩] 실시간으로 그래프 업데이트하기

by freezkim 2010. 4. 27.

Q. 그래프를 실시간으로 그리고 싶은데 어떻게 해야 하나요?

그래프에 새로운 좌표를 실시간으로 찍어주고 싶은데, 어떻게 해야 하나요?

A. drawnow를 사용하시면 됩니다.

실시간으로 통신을 할때나,
혹은 데이터의 처리 과정을 보기 위해 실시간으로 그래프를 표시해야 될 때가 있습니다.

질문의 이해를 위해 실시간으로 그래프가 그려지는 동영상을 첨부하였습니다.



이런식으로 그래프의 창(figure)은 유지한 채로, 새로운 데이터를 그 창에 찍어주는 거죠.

쉽게 생각해보았을 때, plot이 된 그래프에 hold on을 해서 다시 plot을 하는 과정을 반복해보면 당연히 될것이라는 예측을 할 수 있습니다만

for i=1:1000
 plot(i,i,'b.');
 hold on
end

이런식으로 코딩을 직접 해보면 새롭게 그래프가 그려지는 것이 아니라, for loop을 다 돌고 나서 최종적으로 plot이 나타나게 되는걸 볼 수 있습니다. 즉, for문이 도는 동안 그래프 plot이 매트랩창 상에 나타나지 않는것입니다.

하지만 우리는 for문이 도는 동안 plot에 계속 새로이 업데이트 되는 것을 보고 싶은것이므로, 실시간으로 plot이 나타나도록 해야겠죠.

이 경우 drawnow라는 명령어를 추가하면 됩니다.

즉,

for i=1:1000
 plot(i,i,'b.');
 hold on
 drawnow;
end

이렇게 코드를 짜 주면 됩니다.

이 drawnow라는건 어떤 loop이 돌아갈 때 외부에서 새로이 정보를 업데이트 해줄때도 쓰입니다.
자세한건 matlab gui강의에서 다시 설명할 기회가 있을것 같네요ㅋ

어찌돼었건, 첫번째의 경우와 두번째의 경우를 비교하는 것으로 답변을 마치겠습니다.

1) 경우 1: 실행코드 >>

for i=1:1000
 plot(i,i,'b.');
 hold on
end



2) 경우 2: 실행코드 >>

for i=1:1000
 plot(i,i,'b.');
 hold on
 drawnow;
end