公式のdocument: https://matplotlib.org/api/animation_api.html
matplotlib version 2.1 から、JSAnimation は matplotlib に取り込まれた。
JSAnimation は matplotlib.pyplot で生成したplotを連続して表示することで、アニメーション表示を実現している。
%matplotlib notebook
というマジックを使う。
%matplotlib inline
ではないことに注意すること。
ArtistAnimation()
は生成した画像の配列を渡して、まとめて表示する。
FuncAnimation()
は画像を生成する度に表示を行う。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import random
%matplotlib notebook
fig = plt.figure(figsize=(5,5))
images = []
for i in range(20):
rand = np.random.randn(100) # 100個の乱数を生成する
img = plt.plot(rand)
plt.title("sample")
plt.ylim(-10,10)
images.append(img)
anim = animation.ArtistAnimation(fig, images, interval=100, repeat=False)
plt.show()
# to save, you have to install some additional packages
# anim.save("output.mp4", writer="something_good")
fig = plt.figure(figsize=(5,5))
def animate(i):
plt.cla()
rand = np.random.randn(100)
img = plt.plot(rand)
plt.title("sample")
plt.ylim(-10,10)
return img
anim = animation.FuncAnimation(fig, animate, interval=100, frames=20, repeat=False)
plt.show()
保存するアニメーションの形式によって、何をインストールしておくべきかが異なる。mp4で保存するにはどうすればよいか?
現在手元で使っているPC (msi)では、単に anim.save("aaa.mp4")
として呼び出すことで、うまく保存できた。どうやら ffmpeg
をインストールしておけばよさそうだ。
fig = plt.figure(figsize=(5,5))
def animate(i):
plt.cla()
rand = np.random.randn(100)
img = plt.plot(rand)
plt.title("sample")
plt.ylim(-10,10)
return img
anim = animation.FuncAnimation(fig, animate, interval=100, frames=20, repeat=False)
anim.save("saved_anim.mp4")
plt.show()