Matplotlib의 animation 모듈을 활용하면 사인 곡선을 부드럽게 움직이는 애니메이션을 손쉽게 구현할 수 있습니다. 이 글에서는 FuncAnimation 클래스를 사용해 사인 곡선을 애니메이션으로 표현하는 전체 과정을 단계별로 살펴보겠습니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 주변의 여백을 조정합니다.
- 새 그림을 생성하거나 기존 그림을 활성화합니다.
- 현재 그림에 축(axes)을 추가하고 x, y축 범위를 지정합니다.
- 빈 리스트를 사용해 선(line) 객체를 초기화합니다.
init()함수에서 선 데이터를 빈 상태로 설정하여 애니메이션 시작점을 준비합니다.animate()함수에서 프레임마다 사인 곡선 값을 갱신하고 선 객체를 반환합니다.show()메서드로 결과 그림을 화면에 표시합니다.
예제 코드
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
def init():
line.set_data([], [])
return line,
def animate(i):
x = np.linspace(0, 2, 1000)
y = np.sin(2 * np.pi * (x - 0.01 * i))
line.set_data(x, y)
return line,
anim = animation.FuncAnimation(fig, animate, init_func=init, frames=200, interval=20, blit=True)
plt.show()
코드 설명
핵심은 animation.FuncAnimation 함수입니다. 주요 매개변수는 다음과 같습니다.
- fig: 애니메이션이 그려질 대상 그림 객체입니다.
- animate: 각 프레임마다 호출되어 그래프를 갱신하는 함수입니다.
i값이 증가함에 따라 사인 파형이 오른쪽으로 이동합니다. - init_func: 애니메이션 시작 전에 선을 빈 상태로 초기화하는 함수입니다.
- frames: 총 프레임 수로, 여기서는 200프레임이 반복됩니다.
- interval: 프레임 간 지연 시간(밀리초)으로, 값이 작을수록 애니메이션이 빨라집니다.
- blit: True로 설정하면 변경된 부분만 다시 그려 렌더링 성능이 향상됩니다.
실행 결과
코드를 실행하면 x축 방향으로 계속 흐르는 사인 곡선 애니메이션이 나타납니다. animate(i) 함수 내부의 0.01 * i 항이 위상(phase)을 점진적으로 변화시켜 마치 파도가 굴러가는 듯한 움직임을 만들어냅니다.
