Pythonで可視化といえばMatplotlibだけど、APIがごちゃちゃしていて覚えにくいのが難点かな。BokehがAPIもうまく整理されていて一番使い勝手がいい気がするけど、まだまだ日本語の情報が少ないのが惜しいところ。
これからはWebにも対応できるBokehが伸びてくるんじゃないかと勝手に期待している。
おすすめの使い分け方
- 簡単なデータを手早くプロットするなら
- Matplotlib
- MATLABからPythonに乗り換えたなら
- Matplotlib
- かっこよく人に見せたいなら
- Bokeh
- 対話操作を入れたいなら
- Bokeh
- グラフ上のデータ点の数値を確認したいなら
- Bokeh
- Plotly
- 3D形状をプロットするなら
- Plotly
- Mayavi
- 統計分析するなら
- seaborn
Matplotlib
良い点
- 簡単なデータをプロットするのは楽。
- プロットの機能が充実している(気がする)。
- 日本語の情報が他と比べると多い。
- pandasのDataFrame.plotメソッドなどから直接プロットできる。
- APIがMATLABに似ているので、MATLABから乗り換えるのは楽。
- 3Dプロットのスケールが軸ごとに自動設定される。
悪い点
- デフォルトでは日本語が表示できない。
- Notebook上では対話的にグラフを動かせない。(
%matplotlib inline
の代わりに%matplotlib notebook
としておけば動かせるけど、Notebookを閉じてもう一度開くと動かせなくなっている。) - 命令型のAPIとオブジェクト指向のAPIが混在していて、混乱することがある。
- 対話操作のレスポンスは良くない。
- 3Dプロットの手順は面倒で覚えにくい。
- 3Dプロットで3軸のスケールを揃えるのはかなり面倒なので3D形状を表示するのには適していない。
プロットのサンプル
Bokeh
良い点
- Notebook上でもプロット後に対話的にグラフを動かせる。
- 対話的に動かせるグラフをHTML化して人に渡せる。
- 対話操作のカスタマイズが容易
- Webサイトに埋め込める。
- ストリーミングデータで動的にグラフを更新できる。
- WebGLを有効にすれば大量のデータをプロットしてもレスポンスよく動かせる。
- ドキュメントが読みやすい。
悪い点
- 3Dプロットができない。
- 基本となるplottingモジュールのAPIは色分けを自分でやらないといけない。
- chartsモジュールのAPIは簡単なデータをプロットするにはまわりくどい。
プロットのサンプル
動かせるサンプルはここ Gallery — Bokeh 0.12.4 documentation
Plotly
良い点
- Notebook上でもプロット後に対話的にグラフを動かせる。
- 対話的に動かせるグラフをHTML化して人に渡せる。
- データ点の数値を表示する機能がデフォルトで有効になっている。
- 3Dプロットが2Dプロットと同じ手順でできる。
- 3Dプロットのレスポンスがいい。
- 3Dプロットのスケールが3軸とも同じなので3D形状を表示するのに適している。
他の機能もだいたいBokehに近い感じだけど、詳しく調べていない。
悪い点
- グラフのサイズを指定するのが面倒。
- 3Dプロットを軸ごとに違うスケールで表示する方法がわからない。
- 情報がかなり少ない。
- 一部の機能は有料(Streamingは有料らしい)
- ドキュメントが参照しづらい。
- docstringの説明が短い。
- サンプルコードのほとんどが有料版のAPIを使っている。
- 公式ドキュメントで検索ができない。
プロットのサンプル
動かせるサンプルはここ Python Graphing Library, Plotly
補足: サンプルコードを無償版で動かすには
import plotly.plotly as py
を import plotly.offline as py
に置き換えれば、だいたいは動くはず。
Mayavi
良い点
- 3Dプロット専用なので3Dプロットの機能が充実している。
- プロット後に設定を変更できる。
- 3Dプロットについての日本語のチュートリアルがある。
悪い点
- PyQt5に対応していないのでインストールが面倒
- Anaconda 4.3.0のroot環境ではデフォルトでは動かない。
- バージョンを指定してPyQt4をインストールする必要がある。
-
conda update --all
はNG(PyQt5にアップデートされる)
- デフォルトでは軸が表示されない。
- Notebook上での表示は一応できるが、かなり機能が限られている。
seaborn
良い点
- 統計分析に特化した超高水準のAPIがたくさんある
- lmplot: 回帰とプロットをいっぺんに
- jointplot: 2変数の散布図とヒストグラムの組み合わせ
- pairplot: 多変数の散布図をまとめて
- jitterが便利(重複して見えにくい点を少しずらしてプロットする機能)
- jitterの例: seaborn.stripplot
悪い点
- インポートするだけで勝手にMatplotlibのスタイルを変更してしまう。
参考リンク
Jupyter-notebook の作図ライブラリ比較 - Qiita
なんでもかんでもJupyter Notebookに表示するためのチートシート - Qiita