데이터가 실시간으로 변하는 상황(예: 로그 파일, 센서 데이터 모니터링)에서는 Matplotlib 그림을 주기적으로 다시 그려야 합니다. 이 글에서는 데이터 파일의 변경에 따라 그림을 동적으로 업데이트하는 기본적인 접근 방식을 단계별로 살펴봅니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변 여백을 조정합니다.
- 행렬 형태의 서브플롯을 만들기 위해 변수 m(행 수)과 n(열 수)을 초기화합니다.
- 무작위 16진수 코드로 색상 목록을 생성하여 각 플롯의 색을 동적으로 지정합니다.
- plot() 메서드에 무작위 데이터를 넣어 동적 데이터 포인트를 그립니다.
- plt.pause()로 잠시 멈추며 화면을 갱신하고, 마지막에 show() 메서드로 그림을 표시합니다.
예제 코드
import numpy as np
import matplotlib.pyplot as plt
import random
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
m = 2
n = 4
fig, axes = plt.subplots(nrows=m, ncols=n)
hexadecimal_alphabets = '0123456789ABCDEF'
color = ["#" + ''.join([random.choice(hexadecimal_alphabets)
for j in range(6)]) for i in range(m*n)]
for i in range(m):
for j in range(n):
axes[i][j].clear()
axes[i][j].plot(np.random.rand(10), np.random.rand(10),
color=color[100 % np.random.randint(1, len(color))])
plt.pause(0.1)
plt.show()
코드 설명
plt.pause(0.1)은 0.1초 동안 이벤트 루프를 실행하고 화면을 갱신하는 핵심 요소입니다. 이 호출이 있어야 반복문 안에서 그림이 매번 새로 그려집니다. 또한 axes[i][j].clear()로 이전 내용을 지운 뒤 새 데이터를 그리면 잔상 없이 깔끔하게 업데이트할 수 있습니다.
실제 데이터 파일에 적용하기
실제 환경에서는 위 예제의 np.random.rand(10) 부분을 파일에서 읽어온 데이터로 바꾸면 됩니다. 반복문 안에서 CSV나 텍스트 파일을 다시 읽어 clear() 후 새 데이터를 그리도록 하면, 파일이 갱신될 때마다 그래프가 함께 업데이트되는 실시간 모니터링 화면을 손쉽게 구현할 수 있습니다.
실행 결과
