본문 바로가기

Software/Python

Python에서 그래프를 애니메이션으로 표현하고 GIF로 저장하기

Python으로 그래프를 그려서 시각화를 하다보면 ... 음.. 그 중에서 특히 어떤 정보를 보여주기 위해 발표같은 자리에서 데이터를 그래프로 보여주다 보면 애니메이션으로 처리하고 싶어질 때가 많습니다. 그러나... 이떄 Python 코드를 직접 실행시키기 곤란할 때가 있죠... 혹은 애니메이션만 따로 보여준다든지... 그럴때 사용할 만한 예제를 오늘 다룰려고 합니다. 뭐 언제나 그렇듯 오늘 예제도 인터넷에 존재하시는 엄청난 고수분들의 예제중 하나를 그대로 소개할 뿐입니다.^^. 오늘은 Jake Vanderplas분의 블로그[바로가기]에서 가져온 내용입니다. 먼저 코드를 보죠...

"""
Matplotlib Animation Example

author: Jake Vanderplas
email: vanderplas@astro.washington.edu
website: http://jakevdp.github.com
license: BSD
Please feel free to use and modify this, but keep the above information. Thanks!
"""

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

# First set up the figure, the axis, and the plot element we want to animate
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)

# initialization function: plot the background of each frame
def init():
    line.set_data([], [])
    return line,

# animation function.  This is called sequentially
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,

# call the animator.  blit=True means only re-draw the parts that have changed.
anim = animation.FuncAnimation(fig, animate, init_func=init, frames=200, interval=20, blit=True)

anim.save('exAnimation.gif', writer='imagemagick', fps=30, dpi=100)

plt.show()

뭐 워낙 심플하니 따로 할 이야기는 없지만, 일단 애니메이션을 위해 중요한 것은 matplotlib 모듈의 animation을 사용하는 겁니다. 해당 함수를 보면 animation.FuncAnimation이라는 함수인데요. 문법은 그릴 대상인 fig를 지정하고, 스탭에 따라 변화하는 그림을 나타내는 def animate()함수를 준비해 주면 됩니다. 그러면...

이런 그림과 함께 화면상에 애니메이션이 시작되는 거죠^^. 그런데 이 애니메이션을 GIF로 저장하는 것도 필요할 때가 있죠. 그건 위 코드에서 animation.save라는 명령이 해결합니다. 단, GIF로 저장하기 위해 추가 설치해야할 것이 있습니다.

바로 imagemagick라는 아이가 필요합니다. 저는 Ubuntu에서 설치했기 때문에 sudo apt-get install imagemagick으로 설치할 수 있습니다. 윈도우 유저들은 imagemagick 사이트에 가서 설치하시면 됩니다. 이제 결과로 얻은 GIF 파일을 보면...

이렇습니다.^^. 괜찮죠^^. 마지막으로 예제 파일을 올려둡니다.

exAnimation.py

반응형