Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 실시간 그래프 UI 만들기 – Matplotlib 애니메이션 활용법

개요

파이썬 프로그램에서 간단한 UI에 실시간 그래프를 표시하고 싶다면 Matplotlib의 애니메이션 기능을 활용하는 것이 가장 효과적입니다. 이 글에서는 FuncAnimation 클래스를 사용해 컨투어 플롯(contour plot)을 지속적으로 갱신함으로써 실시간 그래프처럼 보이는 화면을 구현하는 방법을 단계별로 살펴보겠습니다.

구현 단계

  • 그림 크기 설정: figure 크기를 지정하고, 서브플롯 사이 및 주변의 여백(padding)을 자동으로 조정합니다.

  • 랜덤 데이터 생성: NumPy를 이용해 10×10 형태의 랜덤 데이터를 준비합니다.

  • figure와 서브플롯 생성: subplots() 메서드를 사용해 그림과 축(ax) 객체를 함께 생성합니다.

  • 애니메이션 정의: FuncAnimation() 클래스를 사용해 특정 함수(func)를 반복적으로 호출하는 애니메이션을 만듭니다.

  • 업데이트 함수 작성: 매 프레임마다 컨투어 값을 새로 그리는 animate() 함수를 정의하고, 이를 FuncAnimation()에 전달합니다.

  • 화면 출력: 마지막으로 show() 메서드를 호출해 결과를 화면에 표시합니다.

예제 코드

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
data = np.random.randn(800).reshape(10, 10, 8)
fig, ax = plt.subplots()

def animate(i):
    ax.clear()
    ax.contourf(data[:, :, i], cmap="copper")

ani = animation.FuncAnimation(fig, animate, 5, interval=100, blit=False)
plt.show()

코드 설명

위 예제에서는 총 800개의 난수를 생성한 뒤 (10, 10, 8) 형태로 재구성했습니다. 즉, 10×10 크기의 2차원 데이터가 8장 준비되어 있는 셈입니다. animate(i) 함수는 프레임 인덱스 i를 받아 해당 슬라이스의 데이터를 contourf()로 다시 그리며, cmap="copper" 옵션으로 구리색 계열의 색상 맵을 적용합니다.

FuncAnimation(fig, animate, 5, interval=100, blit=False)는 총 5개 프레임을 100밀리초 간격으로 순환 재생하도록 설정합니다. blit=False로 지정하면 매 프레임마다 전체 그림을 다시 렌더링하기 때문에 축이나 색상 범위가 바뀌는 경우에도 안정적으로 동작합니다.

실행 결과

코드를 실행하면 8장의 랜덤 컨투어 이미지가 0.1초 간격으로 전환되며, 마치 실시간으로 데이터가 변화하는 것처럼 부드럽게 애니메이션이 재생됩니다.

파이썬으로 실시간 그래프 UI 만들기 – Matplotlib 애니메이션 활용법

마무리

이 방식은 센서 데이터 모니터링, 시뮬레이션 결과 시각화, 실시간 분석 대시보드 등 다양한 상황에 응용할 수 있습니다. 프레임 수와 interval 값을 조절하거나, 실제 데이터 스트림을 animate() 함수 내부에서 읽어오도록 수정하면 진정한 의미의 실시간 그래프 UI를 손쉽게 구축할 수 있습니다.