matplotlib - 차트에 애니메이션 넣기 (FuncAnimation)

반응형

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())
반응형