複数の画像ファイルとmatplotlibで描いたグラフを組み合わせて、以下のようなgifアニメーションを作る方法を整理しました。matplotlibでアニメーションを作るまずは、matplotlibで描いたグラフを繋ぎ合わせて、単純なアニメーションを作ってみます。何はともあれまず作るとりあえず作ってみるだけなら以下で作ることができます。repeat_delay=1000)Spyder等を使っている人は、画像出力をinlineではなくautoにしておきましょう。上記を実行すると、以下のようなアニメーションが表示されるはずです。思ったら大間違いで、保存が手間なのです。保存コマンドは以下ですが、実行するとエラーが出るはずです。animations.エラーの内容はwriterがない、ということですので、内容通りffmepgをダウンロードしましょう。インストールは特に不要で、C直下等に解凍したフォルダを置き、合わせて実行ファイルのパス(例:C:\\ffmpeg\bin)を環境変数に登録すればOKです。導入後、再び保存を実行すると、また同じエラーが出てしまうはずです。magickなるソフトがさらに必要であることが分かるので、imagemagickのサイトからダウンロード・インストールしましょう。インストールした後、matplotlibのmatplotlibricファイルに以下の内容(実際にmagick.exeがあるパス名を使ってください)を忘れずに追加してください。Files\ImageMagick-xxx\magick.exe上記ははしくれエンジニアもどきのメモ様のサイトを参考にさせていただきました。導入後、再び保存を実行すると、なにやらwarningが出ますがgifファイルが出来ていて、開くとちゃんとアニメーションが表示できることを確認できるはずです。ani.save("test.gif")読み込んだ画像ファイルからアニメーションを作る次に、画像ファイルを繋ぎ合わせてアニメーションを作ってみます。例題としてフェデラーのフォアハンドの連続写真を使ってみます。カッコよかったのでこのサイト様の画像を失敬しています。何はともあれまず作る先ほどと同様のコードの一部を置き換え、作ってみましょう。画像ファイルの読み込みはPILのImageを、読み込んだImageの書き込みはplt.imshowで実施します。ani.save("test.gif")が、これは以下のようなエラーが出ます。iterableどうやら、plt.imshow(tmp)をそのまま入れていたのがまずかったようで、該当部分をims.append([plt.imshow(tmp)])と、リストで渡すようにしたら解決しました。出来上がったのがこちら。不満はありますが、フェデラー先生バッチリと動いてますね。軸を消す上記は軸がうっとおしいので削除します。軸を消すためには例えば以下のコードを追加します。labelleft='off')エイリアシングに対処するまた、目のいい人なら気付くかもしれませんが、画像の拡大・縮小をするとエイリアシング(ギザギザ的なノイズ)が発生します。これらは直線等の単純な図形ほど顕著です。対応するため、線形補完を実施しましょう。interpolation="spline36")線形補完の種類と効果に関しては、stackoverflowに分かりやすく書かれていますので参考にしてみてください。最終的なコードと結果は以下になります。これで画像ファイルから描く方法もOKですね。ani.save("test.gif")複数の画像を組み合わせてアニメーションを作る最後に、subplotを作った複数の画像からアニメーションを作ってみます。subplotを使ったグラフを描く場合、subplotを切り替えながらひとつのオブジェクト(im)の上に2つのグラフを描画し、それらをまとめてims追加するという手順で実施します。ims.append(im)ソースコード全文は以下。下記により冒頭のアニメーションが得られます。以下のようなエラーが出る場合があります。--verbose-debug.この場合は、以下のようにwriterがimagemagickであること明記しましょう。コメントをキャンセルメールアドレスが公開されることはありません。*サイト上に表示された文字を入力してください。プロフィール兵庫県在住の30代データサイエンティスト。Pythonを使った機械学習等によるデータ分析や、ウェブアプリ等のシステム開発に取り組んでいます。