matplotlib.animationで動くグラフに挑戦!

matplotlibにはアニメーションを作る機能、matplotlib.animationがあります。

複数のプロットを連続で表示することで動くアニメーションを作ることができます。

この記事では

  • matplotlib.animationとは
  • matplotlib.animationの使い方

などを解説します。

matplotlib.animationには2つのアニメーションの作り方があります。

  • データを全てプロットしてからアニメーションを作る
  • 逐次的にプロットしながらアニメーションを作る

このふたつの機能の使い方を整理しました。

この記事を全部に読んだ頃にはmatplotlib.animationに使いこなせる様にがんばりましょう!

matplotlib.animationとは

matplotlib_plot_1

[引用:matplotlib.org]

matplotlib.pyplotで作ったプロットを複数用意して、連続で表示します。

これがmatplotlib.animationモジュール関数の仕組みです。

ニューラルネットワークの重みを可視化したり、機械学習の学習中に損失関数の値を確認したりに使えますね。

matplotlib.animationの使い方

ani1

ここで解説しているコードはJupyter Notebook/Labのものです。

実際に手元で動かしながら記事を読み進めてみてください!

まずは以下のimportを行います。

%matplotlib notebook

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

動くグラフを表示するには%matplotlib notebookというマジックコマンドを使います。

よく使う%matplotlib inlineではないので注意してください。

データを全てプロットしてからアニメーションを作る

このアニメーション作成には、animation.ArtistAnimation関数を使います。

animation.AristAnimation関数の引数は以下の通りです。

  • 第一引数には、plt.figure()のインスタンスを渡します。
  • 第二引数には、アニメーションとして連続表示させたいプロットのリストを渡します。
  • intervalには、連続表示するプロットを何ms毎に更新するかを指定します。
fig = plt.figure()
ims = []

for i in range(100):
    rand = np.random.randn(100) # 100個の乱数を作成
    
    img = plt.plot(rand) # グラフを作成
    plt.title("sample animation")
    plt.ylim(-10,10)
 
    ims.append(img) # グラフを配列に追加
 
 

# 100枚のプロットを 100ms ごとに表示するアニメーション
ani = animation.ArtistAnimation(fig, ims, interval=100)
plt.show()
[実行結果]

plt.animation1

実験結果を発表するときなどに便利そうですね。

intervalの値は100msにしましたが、適切な値を考えて指定してください。

逐次的にプロットしながらアニメーションを作る

このアニメーション作成にはanimation.FuncAnimation関数を使います。

animation.FuncAnimation関数の引数は以下の通りです。

  • 第一引数には、plt.figure()のインスタンスを渡します。
  • 第二引数には、プロットを一枚作成する関数を渡します。
    • つまり関数内でplt.plot()のような関数が使われていればOKです。
  • intervalには、連続表示するプロットを何ms毎に更新するかを指定します。
fig = plt.figure()

xlim = [0,100]
X, Y = [], []

def plot(data):
    plt.cla()                   # 前のグラフを削除
    
    Y.append(random.random())   # データを作成
    X.append(len(Y))
    
    if len(X) > 100:            # 描画範囲を更新
        xlim[0]+=1
        xlim[1]+=1
    
    plt.plot(X, Y)              # 次のグラフを作成
    plt.title("sample animation (real time)")
    plt.ylim(-1,2)
    plt.xlim(xlim[0],xlim[1])
    

# 10msごとにplot関数を呼び出してアニメーションを作成
ani = animation.FuncAnimation(fig, plot, interval=10, blit=True)
#ani.save('sample2.gif', writer='imagemagick')
plt.show()
[実行結果]

plt.animation2

機械学習モデルの学習フェーズで、

  • 損失関数の動きをモニタリングする
  • ニューラルネットの結合重みを画像にして可視化する

などに使えそうです。

x軸の指定をしっかりとしたほうが分かりやすいグラフができるので、面倒ですが適切な指定をしましょう。

機械学習やPythonをもっと勉強するには

samurai_eye

機械学習やPythonなどの勉強、1人だと疑問の解消が大変です。

侍エンジニア塾では、専属のインストラクターとマン・ツー・マンレッスンで勉強するサービスを提供しています。

プログラミング・機械学習などの勉強を本気でやりたい方、侍エンジニア塾を検討してみてはいかがでしょうか。

まとめ

この記事ではmatplotlib.animationの使い方を紹介しました。

matplotlibはPythonでよく使われる可視化ツールです。

簡単なコードで動くグラフが作れる機能を生かして、分かりやすい可視化に挑戦しましょう!

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

フクロウ

第一言語はPythonです。
皆さんRustやりましょう。

おすすめコンテンツ

まずはここから!初心者でも1から学べるプログラミング入門カリキュラム

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー