Edited at

Pythonの可視化パッケージの使い分け

More than 1 year has passed since last update.

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形状を表示するのには適していない。


プロットのサンプル

output_1_1.png


Bokeh


良い点


悪い点


  • 3Dプロットができない。

  • 基本となるplottingモジュールのAPIは色分けを自分でやらないといけない。

  • chartsモジュールのAPIは簡単なデータをプロットするにはまわりくどい。


プロットのサンプル

スクリーンショット 2017-01-28 17.55.39.png

動かせるサンプルはここ Gallery — Bokeh 0.12.4 documentation


Plotly


良い点


  • Notebook上でもプロット後に対話的にグラフを動かせる。

  • 対話的に動かせるグラフをHTML化して人に渡せる。

  • データ点の数値を表示する機能がデフォルトで有効になっている。

  • 3Dプロットが2Dプロットと同じ手順でできる。

  • 3Dプロットのレスポンスがいい。

  • 3Dプロットのスケールが3軸とも同じなので3D形状を表示するのに適している。

他の機能もだいたいBokehに近い感じだけど、詳しく調べていない。


悪い点


  • グラフのサイズを指定するのが面倒。

  • 3Dプロットを軸ごとに違うスケールで表示する方法がわからない。

  • 情報がかなり少ない。

  • 一部の機能は有料(Streamingは有料らしい)

  • ドキュメントが参照しづらい。


    • docstringの説明が短い。

    • サンプルコードのほとんどが有料版のAPIを使っている。

    • 公式ドキュメントで検索ができない。




プロットのサンプル

スクリーンショット 2017-02-02 23.44.25.png

動かせるサンプルはここ Python Graphing Library, Plotly


補足: サンプルコードを無償版で動かすには

import plotly.plotly as pyimport plotly.offline as py に置き換えれば、だいたいは動くはず。


Mayavi


良い点


悪い点


  • PyQt5に対応していないのでインストールが面倒


    • Anaconda 4.3.0のroot環境ではデフォルトでは動かない。

    • バージョンを指定してPyQt4をインストールする必要がある。


    • conda update --allはNG(PyQt5にアップデートされる)



  • デフォルトでは軸が表示されない。

  • Notebook上での表示は一応できるが、かなり機能が限られている。


seaborn


良い点


  • 統計分析に特化した超高水準のAPIがたくさんある



  • jitterが便利(重複して見えにくい点を少しずらしてプロットする機能)




悪い点


  • インポートするだけで勝手にMatplotlibのスタイルを変更してしまう。


参考リンク

Jupyter-notebook の作図ライブラリ比較 - Qiita

なんでもかんでもJupyter Notebookに表示するためのチートシート - Qiita