より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

Jupyter Notebookでアニメーション。Azure NotebooksでもGoogle Colaboratoryでも。

現在、下記の記事で勉強中なのですが、Jupyter Notebookでアニメーションすることができるようです。

book.mynavi.jp

こんなこともできるのかと驚き、調子に乗ってツイートしてしまいました。

twitter.com

引用元は以下の記事のようです。

Embedding Matplotlib Animations in Jupyter Notebooks | Louis Tiao

アニメーション自体は、matplotlibのAPIとして提供されているので、こちらを使っているようです。

animation — Matplotlib 3.0.2 documentation

ただJupyter Notebookで表示させるポイントとしては、アニメーションをto_jshtml関数を用いてIPython.displayモジュールのHTMLで表示させる点ですね。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from IPython.display import HTML

fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'ro', animated=True)
plt.close()


def init():
    ax.set_xlim(0, 2*np.pi)
    ax.set_ylim(-1, 1)
    return ln,

def update(frame):
    xdata.append(frame)
    ydata.append(np.sin(frame))
    ln.set_data(xdata, ydata)
    return ln,

ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
                    init_func=init, blit=True)

#サンプルコードではplt.show()だけど
#plt.show()

# HTMLで
HTML(ani.to_jshtml())

下記のような画面になります。

f:id:rimever:20181231154040p:plain

Jupyter Notebookの仲間では

Jupyter Lab

こちらではうまく動きませんでした。ローカルでもAzure Notebooks上のJupyterLabでも同様です。

以下のように表示がおかしくなりました。

f:id:rimever:20181231155027p:plain

Azure Notebooks

Azure Notebooksでは可能です。

Google Colaboratory

Google Colaboratoryでも可能です。

私の手元でも動作確認出来たのですが、下記のブログでも紹介されています。

yaju3d.hatenablog.jp

ただ、保存に失敗したのは私だけ?

Datalore

Dataloreだとダメでした。

plt.close()のコードを削除することで、それっぽいのは表示されたのですが、再生ボタンが表示できませんし、アニメーションもされません。

f:id:rimever:20181231160734p:plain
再生ボタンが