YutaKaのPython教室
Pythonのグラフ描画ライブラリMatplotlibではアニメーションも作成できますが、初めての人には少し複雑です…。
そこで、今回は
- Matplotlibでアニメーションを描きたいけど、よくわからない!
- 試しにやってみたけど、アニメーションが動かない…。
という方のために、
- Matplotlibでアニメーションを超簡単に作成・保存する方法
- アニメーション作成用の超基本テンプレ
を画像・サンプルコード付きで紹介していきます!
今回は、初心者の方向けにArtistAnimationでサクッとアニメーションを作成する方法を紹介しています。
- Matplotlibでアニメーションを作成する2つの方法
- Jupyter Notebookの場合の注意点
- ArtistAnimationでアニメーション作成
- ArtistAnimationの基本形
- 引数によるアニメーションの詳細設定
- 【応用編】複数要素を同時にアニメーション化
- 【応用編①】タイトルやテキストを更新するアニメーション
- 【応用編②】複数グラフのアニメーションを同時に表示
- アニメーションの保存方法
- mp4で保存
- gifで保存
- まとめ
Matplotlibでアニメーションを作成するには、matplotlib.animationモジュールのクラスを使用します。
ArtistAnimationクラスかFuncAnimationクラスを使いますが、それぞれ次のような特徴があります。
- ArtistAnimationクラス:
- 事前にグラフ要素を複数作成
- それらを組み合わせてアニメーションにする
- FuncAnimationクラス:
- 事前にグラフ更新用関数を作成
- 関数を実行しながらアニメーションにする
今回は、比較的簡単なArtistAnimationクラスの使い方を紹介します。
▲目次へ戻る Jupyter Notebookの場合の注意点Jupyter Notebookの場合、%matplotlib inlineでMatplotlibを読み込んでも、アニメーションは表示できません。
Jupyter Notebook上でアニメーションを表示するには、Matplotlib読み込み時に次のコードを実行します。
%matplotlib notebook from matplotlib import pyplot as plt%matplotlib notebookで読み込むと、Matplotlibのバックエンド(内部処理方法)が変更されて、動画を表示できるようになります。
%matplotlibについて、詳しく知りたい方は次の記事をチェックしてください。
≫matplotlib inline の謎解明! |「書けと言われたので書いています」から卒業 Jupyter Notebookでmatplotlibを使用する場合には、インポートする前に%matplotlib inlineと記述します。なぜinlineと入力しているのでしょうか?この記事では、matplotlib inlineの謎について解説していきたいと思います! www.yutaka-note.com/entry/matplotlib_inline ▲目次へ戻る ArtistAnimationでアニメーション作成アニメーション作成では、
- ArtistAnimationクラスのanimオブジェクトを作成すること
が一つ目のゴールになります。
from matplotlib.animation import ArtistAnimation anim = ArtistAnimation(fig, artist)ArtistAnimationの必須引数の意味は次の通りです。
引数名 解説 Fig アニメーションを描くfigure Artists アニメーション化するグラフ要素のリストMatplotlibでは、グラフの要素はartistと名付けられているので、引数名もartistsとなっています。
ArtistAnimationでは、
- 事前にグラフ要素(artist)を複数用意、リスト化(artists)
- artistsを組み合わせてアニメーションにする
と考えるとわかりやすいです。
図にすると次のようなイメージです。
▲目次へ戻る ArtistAnimationの基本形基本的には次の手順を踏みます。
- 必要なモジュールの読み込み
- グラフ領域の作成 ⇒ figの準備
- アニメーション用のグラフ要素リストの作成 ⇒ artistsの用意
- アニメーション化 ⇒ ArtistAnimationインスタンス作成
簡単なアニメーションを例に、手順を見ていきましょう。
# 1. 必要なモジュールの読み込み %matplotlib notebook import numpy as np from matplotlib import pyplot as plt from matplotlib.animation import ArtistAnimation # 2.グラフ領域の作成 fig, ax = plt.subplots() # 3. グラフ要素のリスト(artists)作成 artists = [] for i in range(100): x = np.linspace(0, 4*np.pi) y = np.sin(x - i/100 * 2*np.pi) artist = ax.plot(x, y,"blue") artists.append(artist) # 4. アニメーション化 anim = ArtistAnimation(fig, artists) plt.show()これを実行すると次のようなアニメーションが出力されます。
ポイントは、3. アニメーション要素のリスト作成です。
- i = 0~99で、for文を回しながら、グラフ要素(artist)を複数作成
- 全artistをリストartistsに追加
これで、アニメーション要素のリストartistsが作成されます。
最後に
- ArtistAnimationクラスで、artistsをもとにしたanimオブジェクト作成
- plt.show()で表示
しています。
▲目次へ戻る 引数によるアニメーションの詳細設定オプショナル引数で、アニメーションの作成方法の詳細設定が可能です。
引数名 解説 interval フレームの間隔デフォルト:200ミリ秒 repeat_delay 動画を繰り返す場合、繰り返し間の待機時間デフォルト:0ミリ秒 repeat 動画を繰り返すかどうかTrue or Falseデフォルト:True blit ブリッティングするかどうかTrue or Falseデフォルト:Falseブリッティングとは、アニメーション作成時の処理手法です。ブリッティングした方が、処理が高速になります。
以下は、intervalを調整した例です。
anim = ArtistAnimation(fig, artists, interval=10, repeat_delay=1000) plt.show()フレームの間隔を短くしています。
▲目次へ戻る 【応用編】複数要素を同時にアニメーション化ArtistAnimationの引数artistをリスト内リスト形式にして、複数の要素をアニメーション化するように設定できます。
次のように各フレームの要素を一つのリストとして、リスト内リストを作成します。
artists = [[frame1の要素1, frame1の要素2,...], [frame2の要素1, frame2の要素2,...], [frame3の要素1, frame3の要素2,...],...]これを利用して、
- タイトルやテキストを更新するアニメーション
- 複数グラフのアニメーション
を作成する方法を紹介します。
▲目次へ戻る 【応用編①】タイトルやテキストを更新するアニメーションplt.text()を利用して、タイトルとテキストを更新するアニメーションを作成してみます。
# 3. アニメーション要素のリスト artists = [] for i in range(100): x = np.linspace(0, 4*np.pi) y = np.sin(x - i/100 * 2*np.pi) # アニメーション化する要素の準備 my_line, = ax.plot(x, y,"blue") my_text = ax.text(0, y[0], " ⇐ inlet", color="darkblue", size ="large") my_title = ax.text( 4.5, 1.15, f"Count = {i}", size="xx-large") # アニメーション化する要素をリスト化 artists.append([my_line, my_text, my_title]) # 4. アニメーション化 anim = ArtistAnimation(fig, artists, , interval=50) plt.show()次のようなアニメーションになります。
artists.append([my_line, my_text, my_title])で、各フレームの更新要素をリスト内リストにしている点がポイントです。
ax.title()はアニメーションに対応していないので、タイトルもax.text()で行います。
ax.text()について詳しく知りたい方は、次の記事をチェックしてください。
≫matplotlib pyplot.text |matplotlibのテキスト表示をマスターせよ! グラフ内にテキストでコメントを記入することってよくありますよね?グラフにコメントがあると、グラフの大事な部分を強調して説明できます。この記事では、matplotlibでグラフ内にテキストを表示する方法、テキストの見た目の変更方法について図解・サンプルコード付きで解説しています! www.yutaka-note.com/entry/2020/01/08/080413 ▲目次へ戻る 【応用編②】複数グラフのアニメーションを同時に表示次のようにして、artistsを用意すると複数グラフのアニメーションを作成できます。
- plt.subplots()で、サブプロット領域を複数用意
- 各プロットを更新するようにartistsを用意
一つの図の中で、2つのプロットをアニメーション化する例を紹介します。
# 2.グラフ領域の作成 fig, axes = plt.subplots(1,2) # 3. アニメーション要素のリスト artists = [] for i in range(100): x = np.linspace(0, 4*np.pi) y = np.sin(x - i/100 * 2*np.pi) my_line1, = axes[0].plot(x, y,"b") my_line2, = axes[1].plot(y, x,"r") # アニメーション化する要素をリスト化 artists.append([<a id="_Hlk60231885"></a>my_line1, my_line2]) # 4. アニメーション化 anim = ArtistAnimation(fig, artists, interval=10) plt.show()次のようなアニメーションになります。
artists.append([my_line1, my_line2])で、各フレームのグラフをリスト内リストにしている点がポイントです。
▲目次へ戻る アニメーションの保存方法保存には、作成したanimオブジェクトのsaveメソッドを使用します。
- anim.save("ファイル名.拡張子")
ただし、保存形式によってそれぞれ必要な準備・設定があります。
ここでは、
- mp4形式
- gif形式
で保存する方法を紹介します。
▲目次へ戻る mp4で保存mp4で保存するためには、ffmpegという外部ライブラリを使用します。
使用環境に応じて、condaまたはpipでインストールする必要があります。
conda install ffmpeg pip install ffmpeg-pythonffmpegをインストールできれば、
- anim.save("ファイル名.mp4")
で保存可能です。
anim = ArtistAnimation(fig, artists) anim.save("sin_anim.mp4") # ⇒ カレントフォルダにmp4出力ffmpegをインストールしておけば、比較的簡単に出力できますね。
▲目次へ戻る gifで保存アニメーションをgifで保存するためには、pillowという外部ライブラリを使用します。
インストールしていない場合は、condaまたはpipでインストールする必要があります。
conda install pillow pip install Pillowpillowをインストールしたら、
- anim.save("ファイル名.gif", writer="pillow")
で保存可能です。
anim = ArtistAnimation(fig, artists) anim.save("sin_anim.mp4") # ⇒ カレントフォルダにgif出力pillow以外にも、Imagemagickというものを使用する方法もありますが、pillowの方が簡単に設定できます。
▲目次へ戻る まとめArtistAnimationクラスで、アニメーションを作成する方法を紹介しました。
- 事前にグラフ要素(artist)を複数用意、リスト化(artists)
- artistsを組み合わせてアニメーションにする
というところがポイントです!
Matplotlibマスターを目指す皆さんへの次のおススメコンテンツはこちらです!
≫matplotlib inline の謎解明! |「書けと言われたので書いています」から卒業 Jupyter Notebookでmatplotlibを使用する場合には、インポートする前に%matplotlib inlineと記述します。なぜinlineと入力しているのでしょうか?この記事では、matplotlib inlineの謎について解説していきたいと思います! www.yutaka-note.com/entry/matplotlib_inline ≫matplotlib pyplot.text |matplotlibのテキスト表示をマスターせよ! グラフ内にテキストでコメントを記入することってよくありますよね?グラフにコメントがあると、グラフの大事な部分を強調して説明できます。この記事では、matplotlibでグラフ内にテキストを表示する方法、テキストの見た目の変更方法について図解・サンプルコード付きで解説しています! www.yutaka-note.com/entry/2020/01/08/080413 ≫matplotlib color 色の指定 | 一文字指定からカラーマップの使い方まで徹底解説 伝わるグラフを作るためのポイントはなんでしょうか?いかに視覚的にわかりやすいか、これが大切です。それには重要な要素に色をつけて、視覚的にうったえることが超大切!この記事では、matplotlibでの色の指定方法について、基本から応用まで徹底解説! www.yutaka-note.com/entry/matplotlib_color ≫Matplotlib 軸周り完璧マスターガイド | 軸・軸目盛・目盛り線の設定 Matplotlibで大変なのが軸周りの設定!グラフの「この要素」を変更するには、「どのメソッド」を使えばいいのかわからない…。という方のために、Matplotlibの軸・目盛り・目盛り線の設定について総まとめしました!これで軸周りの設定がだいぶ楽になります。軸周り完ぺきマスターガイド! www.yutaka-note.com/entry/matplotlib_axis ≫Matplotlib 棒グラフを徹底解説|複数系列・積み上げ棒グラフ全てOK Matplotlibで棒グラフを作成する方法がよくわからない…。 棒グラフで悩むなら、MatplotlibあきらめてExcel使おうかな…。 と思ったことはありませんか?そんな方のために、Matplotlibの棒グラフ作成方法を徹底的に解説しました!複数系列?積み上げ棒グラフ?全部大丈夫! www.yutaka-note.com/entry/matplotlib_bar ≫Matplotlib 散布図を徹底解説!|基本設定からバブルチャートまで Matplotlibで散布図を作成する方法がよくわからない…。散布図って何のためにあるの?全部、plt.plotでグラフ作ればよくない?という方のために、「Matplotlibの散布図の作成方法、散布図を応用したデータの可視化例」についてまとめしました! www.yutaka-note.com/entry/matplotlib_scatter ≫Matplotlib 円グラフ作成方法|Excel風グラフ、ドーナツグラフも解説 Matplotlibで円グラフを作成する方法がよくわからない…。何を設定すれば、自分の描きたい円グラフになるのかわからない!という方のために、「Matplotlibの円グラフ作成方法」、「Excel風の見た目に設定する方法」、「グラフやラベルの設定方法」についてまとめしました!これで自由に円グラフを作成できます! www.yutaka-note.com/entry/matplotlib_pie ≫Matplotlib subplotの使い方徹底図解!|一つの図に複数グラフを描く Matplotlibで一つの図の中に複数のグラフを並べるにはどうすればいいの?subplotでグラフを並べられるらしいけど、使い方がよくわからない!という方のために、「plt.subplot()の基本的な使い方」を画像付きで解説していきます!plt.subplot()でプロットをキレイに配置して、見やすく人に伝わるグラフを目指しましょう! www.yutaka-note.com/entry/2020/01/02/232925 ≫【完全保存版】Matplotlib plt.plot徹底解説 | 基本操作を総まとめ! Matplotlibのplt.plotを使用したグラフを作成、グラフの見た目変更、タイトルや軸の設定など基本事項について徹底解説!!この記事を読めば、plt.plotで手軽に手早く簡単に、キレイなグラフ作成可能に!? www.yutaka-note.com/entry/matplotlib_pyplotTwitter@YutaKaでは、ほぼ毎日pythonに関する情報を発信しています。
気楽にツイートしているので、気軽にフォローしてください!