Pythonでアニメーションを使えば、データをより効果的に表現することができます。
アニメーションとは、図形を操作して動画に見せる手法のことで、一連の絵によって作られる動きのシミュレーションがアニメーションです。
今回は、Python matplotlibでアニメーションを非常に簡単に実現できるCelluloidライブラリを使用します。
Celluloid – Pythonによる簡単なアニメーション
初心者にとって、matplotlib のアニメーションチュートリアルは複雑なものになる可能性があります。
Celluloidは、matplotlibを使って簡単にアニメーションを作ることができます。
Celluloid では、各反復でフレームを作成するために可視化の “写真” を撮ります。
すべてのフレームが取り込まれると、1回の呼び出しでアニメーションを作成することができます。
詳しくはReadmeをご覧ください。
Pythonのpipコマンドで、Pythonのcelluloidライブラリをインストールできます。
pip install celluloid |
セル画を使ったアニメーションの作成手順
ライブラリの準備ができたら、さっそくアニメーションを作ってみましょう。
1. Celluloid から Camera クラスをインポートする
まず、celluloid モジュールから Camera クラスをインポートし、matplotlib の figure オブジェクトを渡してカメラオブジェクトを作成する必要があります。
from celluloid import Camera
fig = plt.figure()
camera = Camera(fig)
|
2. データをループさせながらスナップショットを作成
ループしてデータを matplotlib の図に順次プロットし、カメラオブジェクトの .snap( )
メソッドを用いてスナップショットを取得します。
#plotting data using loops and creating snapshot at each iteration plt.plot(..) camera.snap() |
3. アニメーションオブジェクトの作成
すべてのフレームを作成した後、カメラクラスの .animate( )
メソッドを使用します。
#Applying the animate method to create animations animation = camera.animate()
#Saving the animation animation.save( 'my_animation.mp4' )
|
Pythonによるアニメーションの実装例
Pythonで正弦関数をなぞるアニメーションを作成することで、上記のステップを明確に理解しましょう。
#Importing required libraries % matplotlib notebook
import matplotlib.pyplot as plt
import numpy as np
from celluloid import Camera
import ffmpeg
#Creating Data x = np.linspace( 0 , 10 , 100 )
#defining a function to return sine of input values. def fun(i):
y = np.sin(i)
return y
x_y = fun(x)
#Creating matplotlib figure and camera object fig = plt.figure()
plt.xlim( 0 , 10 )
plt.ylim( - 2 , 2 )
camera = Camera(fig)
#Looping the data and capturing frame at each iteration for i in x:
plt.plot(x,x_y , color = 'green' , lw = 0.8 )
f = plt.scatter(i, fun(i) , color = 'red' , s = 200 )
plt.title( 'tracing a sin function' )
camera.snap()
#Creating the animation from captured frames animation = camera.animate(interval = 200 , repeat = True ,
repeat_delay = 500 )
|
正弦関数のトレース上記のコードでは、数値を入力してその正弦を返す関数fun( )を定義しています。
カメラオブジェクトの準備ができたので、データをループして、各反復でトレーサー(赤い色の点)の新しい座標を渡し、出力画像のスナップを作成します。
すべてのフレームをキャプチャした後、以下の入力引数で .animate( )
メソッドを適用します。
-
interval
– 2つのフレーム間の時間、ミリ秒単位。 -
repeat
– (Bool) アニメーションを繰り返し再生するかどうかを指定します。 -
repeat_delay
– repeat が True の場合、アニメーションを繰り返すための遅延時間を設定します。
#Saving the animation animation.save( 'sine_wave.mp4' )
|
このライブラリを使用する際の制限事項です。
このライブラリのいくつかの制限事項: * 軸の制限がすべてのプロットで同じであることを確認してください。
* 凡例は以前のプロットから蓄積されていくので、アーティストを legend
関数に渡して個別に描画してください。
まとめ
この記事では、Pythonでcelluloidライブラリを使用してアニメーションを作成するための非常に簡単な方法を発見しました。
Pythonをより深く理解し、より効率的に使用するために、このライブラリで遊んでみてください。