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

Matplotlib에서 선 그래프 애니메이션 만드는 방법 완벽 가이드

데이터를 시각화할 때 정적인 그래프보다 움직이는 애니메이션이 훨씬 직관적인 경우가 많습니다. Matplotlib의 animation 모듈을 활용하면 선 그래프(line plot)를 손쉽게 애니메이션으로 만들 수 있습니다. 이 글에서는 단계별로 애니메이션 선 그래프를 구현하는 방법을 알아보겠습니다.

애니메이션 선 그래프 구현 단계

  • subplots() 메서드를 사용해 figure와 subplot을 생성합니다.

  • x축과 y축의 범위(scale)를 설정합니다.

  • NumPy를 사용해 x와 t 데이터 포인트를 생성합니다.

  • 좌표 벡터로부터 좌표 행렬 X2와 T2를 반환받습니다.

  • plot() 메서드로 x와 F 데이터를 사용한 선 그래프를 그립니다.

  • 애니메이션 효과를 위해 y 데이터를 지속적으로 업데이트합니다.

  • FuncAnimation 함수에 figure, animate 함수, interval 값을 반복 호출하여 애니메이션을 생성합니다.

  • show() 메서드로 결과 figure를 화면에 표시합니다.

전체 예제 코드

import numpy as np
from matplotlib import pyplot as plt, animation

plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

fig, ax = plt.subplots()
ax.set(xlim=(-3, 3), ylim=(-1, 1))

x = np.linspace(-3, 3, 91)
t = np.linspace(1, 25, 30)
X2, T2 = np.meshgrid(x, t)
sinT2 = np.sin(2 * np.pi * T2 / T2.max())
F = 0.9 * sinT2 * np.sinc(X2 * (1 + sinT2))

line, = ax.plot(x, F[0, :], color='k', lw=2)

def animate(i):
    line.set_ydata(F[i, :])

anim = animation.FuncAnimation(fig, animate, interval=100, frames=len(t) - 1)
anim.save('503.gif')
plt.show()

코드 상세 설명

1. 기본 설정

figure.figsize로 그림 크기를 7.00 × 3.50으로 지정하고, figure.autolayout을 활성화해 레이아웃이 자동으로 조정되도록 합니다.

2. 데이터 생성

np.linspace로 -3부터 3까지 91개의 x 값과, 1부터 25까지 30개의 시간(t) 값을 만듭니다. 이후 np.meshgrid를 통해 좌표 행렬 X2, T2를 생성하고, 사인 함수와 sinc 함수를 조합하여 각 프레임의 y값 배열 F를 계산합니다.

3. 애니메이션 핵심: set_ydata

animate(i) 함수 내부의 line.set_ydata(F[i, :])가 핵심입니다. 프레임 인덱스 i가 바뀔 때마다 y 데이터만 교체하므로 전체 그래프를 다시 그리지 않고도 부드러운 애니메이션을 구현할 수 있습니다.

4. FuncAnimation과 GIF 저장

animation.FuncAnimation(fig, animate, interval=100, frames=len(t)-1)은 100ms 간격으로 animate 함수를 반복 호출합니다. 마지막에 anim.save('503.gif')를 호출하면 완성된 애니메이션을 GIF 파일로 저장할 수도 있습니다.

실행 결과

코드를 실행하면 사인파 형태의 선 그래프가 시간의 흐름에 따라 유동적으로 변하는 애니메이션이 화면에 나타납니다.