概要
jupyterLabでmatplotlib.animation.FuncAnimationを使おうとしたところ、
アニメーションが生成されず、静止画像のみが表示されたので、とりあえずの解決策を共有します。
詳解確率ロボティクスを読んでいてこの問題に行き当たったので、
今後問題に困る人が少なくなるようにこのブログを残しておきます。
前提・動作環境
- OS: windows
- 環境: Anaconda
- JupyterLab 1.1.4
- matplotlib: 3.1.1
コードは「詳解確率ロボティクス」の物をそのまま実行しました。
matplotlib.use('nbagg')が入っていることも確認しています。
調査
このサイトにてJupyter Notebook/JupyterLabでのmatplotlibによるGIFアニメーションについて書かれていました。
2018年4月の記事です。
これによると、
まず、Jupyter NotebookやJupyterLab上に表示する際、
・%matplotlib inline (主に静止画)
・%matplotlib nbagg (動画、インタラクティブ)
この二種類のbackendsを用いるのですが、基本的にJupyterLabだと「nbagg」のほうはダメみたい。
と書かれています。
解決方法が下のサイトで詳しく書かれており助かりました。
詳解確率ロボティクスに特化した解決法
IPython.display.HTML
from IPython.display import HTML
これを追加してインポートし、途中のplt.show()の部分を
plt.close()
return HTML(self.ani.to_jshtml())
に変更します。 jupyterlab上ではplt.show()をせずとも描画されてしまうようのでそれを閉じ、
メソッド内でHTML(self.ani.to_jshtml())とするだけでは描画されないので、returnすれば描画されました。
最後に
初学者なので間違っていたら色々指摘してください。