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人だと疑問の解消が大変です。

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

[su_button url=”https://lp.sejuku.net/lp1_blog_01/?cid=ai_btn1_61007″ target=”blank” background=”#409fdf” color=”#fff88f” size=”10″ center=”yes” radius=”10″ icon=”icon: external-link” icon_color=”#fff88f” text_shadow=”0px 0px 10px #808080″]侍エンジニアとは?
詳細はこちらから
[/su_button]

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

まとめ

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

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

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

この記事を書いた人

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

目次