반응형
FuncAnimation
- matplotlib의 시각화된 자료를 동적(애니메이션)으로 보여주게 하는 함수
필요한 라이브러리
import matplotlib.pyplot as plt
import matplotlib.animation as animation
함수 사용 방법
- animation.FuncAnimation(fig, func, frame=N, fargs(x, y, ax), interval=N, repeat=False)
- fig : matplotlib의 figure 객체
- func: 프레임마다 특정 기능을 수행 할 함수 호출
- frames : 애니메이션이 실행 될 총 프레임 수
- fargs : 애니메이션이 실행 될 때 전달 받을 값
- interval : 애니메이션이 실행될 프레임 간격의 주기, 기본값은 200(0.2초)이며 밀리초로 표시
- repeat : 애니메이션이 종료 될 때의 반복여부, 기본값은 True이며 Bool값이거나 True/False로 기재
- repeat_delay : 재반복 될 때의 주기, 기본값은 200(0.2초)이며 밀로초로 표시
추가 메소드
- pause() : 실행된 애니메이션을 일시중지
- resume() : 일시중지된 애니메이션을 재생
- to_html5_video : 애니메이션을 HTML5 <video>태그로 변환
예제 소스 코드
# 1부터 50까지의 숫자를 plot 차트로 애니메이션
fig = plt.figure( )
ax = plt.axes( )
x= np.arange(51)
y= np.arange(51)
line, = ax.plot(x, y)
# num : 프레임의 번호 (=index)
def update(num, x, y, line):
line.set_data(x[:num], y[:num])
return line,
anim = animation.FuncAnimation(fig, update,
frames=len(x)+1, fargs=(x, y, line),
interval=10, repeat=False)
plt. show( )
실행 화면
주의사항
- 입력하는 환경에 따라 추가 코드가 필요
JupyterNotebook
- 아래의 소스 코드 추가 입력
%matplotlib notebook
그 외 (저는 Colab에서 실행해보았습니다.)
- HTML의 video 태그로 애니메이션 실행
# HTML로 변환하기 위한 필요 라이브러리 호출
from IPython.display import HTML
# 차트의 이중출력 방지
plt.close()
# 애니메이션이 적용된 차트를 HTML video 태그로 출력
HTML(anim.to_html5_video())
환경에 따른 소스 코드
Jupyter Notebook 환경에서의 전체 소스 코드
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
%matplotlib notebook
fig = plt.figure( )
ax = plt.axes( )
x= np.arange(51)
y= np.arange(51)
line, = ax.plot(x, y)
def update(num, x, y, line):
line.set_data(x[:num], y[:num])
return line,
anim = animation.FuncAnimation(fig, update,
frames=len(x)+1, fargs=(x, y, line),
interval=10, repeat=False)
plt. show( )
Colab 환경에서의 전체 소스 코드
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from IPython.display import HTML
fig = plt.figure( )
ax = plt.axes( )
x= np.arange(50)
y= np.arange(50)
line, = ax.plot(x, y)
def update(num, x, y, line):
line.set_data(x[:num], y[:num])
return line,
anim = animation.FuncAnimation(fig, update,
frames=len(x)+1, fargs=(x, y, line),
interval=10, repeat=False)
plt.close()
HTML(anim.to_html5_video())
반응형