われがわログ

最適化アルゴリズムとかプログラミングについて書きたい

Python向け可視化ライブラリの調査【2020年1月版】

まとめ

Pythonから使える可視化ライブラリは様々なものが存在する。 OpenAI Gym界隈ではPygletが使われているが、ドキュメント・ネット上の情報量の点で不満がある。特別な事情がなければmatplotlibを使うのが無難。

背景

OpenAI Gymでは以下のような形で可視化できるが、どう実現しているのか気になった。そこで、Gymを含む強化学習ライブラリや、ロボットシミュレータなどが使用している可視化ライブラリを調査し、どの可視化ライブラリを使うべきかをまとめる。

f:id:estshorter:20200102153921j:plain
CartPole-v1

調査結果

Open AI Gym

classic controlに関しては、Pygletを使用している。 PygletのAPIを叩いているというよりは、OpenGLAPIを直打ちしている。 この方法だと、円や線は簡単に描けるが、文字を表示するのは面倒そう。

gym/rendering.py at master · openai/gym · GitHub

ロボット系に関してはMuJoCoを使用している。詳しくは調べていない。

MiniWorld (gym-miniworld)

これもPygletを使っている。3次元の可視化。OpenGL直打ちのところもGymと同じ。

gym-miniworld/opengl.py at master · maximecb/gym-miniworld · GitHub

https://raw.githubusercontent.com/maximecb/gym-miniworld/master/images/maze_top_view.jpg

Gym Go

以下のページを見てたら発見したライブラリ。

gym/environments.md at master · openai/gym · GitHub

例によってPygletを使っているが、これはPygletのAPIを叩いており、文字も簡単に表示できる。 ただ、後述するmatplotlibに比べると、Pygletはドキュメントやネット情報が少ないのがネック。

GymGo/rendering.py at master · aigagror/GymGo · GitHub

https://raw.githubusercontent.com/aigagror/GymGo/master/screenshots/human_ui.png

Gazebo (ROS)

ロボットのシミュレータであるGazeboではOgreを使っている。使ってみようかと思ったが、インストールが面倒で断念した。

その他の可視化ライブラリ

Panda3D

Pythonバインディングがあるゲームエンジン。condaやpipからインストールできるので楽。試してないけど。

VisPy

科学計算用の可視化ライブラリでインストールも楽だが、まだ未成熟なようで、OpenGLを熟知していないと使いこなせない模様。

matplotlib

みんな大好きmatplotlib。以下の記事のように簡単に可視化できる。 waregawa-log.hatenablog.com

なお、scientific visualizationに関する以下のmatplotlib本が2020年夏に出版予定。楽しみ。

github.com

結論

ドキュメントやネット情報の量を考慮すると、2020年1月現在ではmatplotlibで可視化するのが良いと思われる。実行速度などに不満があれば、PygletやOgreに手を出してみるのもよい。