Python グラフプロットライブラリ¶
グラフをプロットするライブラリ¶
Pythonでは数値計算、ログ解析などをグラフにプロットして可視化したい状況があります。標準ライブラリにはグラフをプロットする機能はないので、サードパーティ・ライブラリを使用します。
このページは、グラフをプロットするライブラリにどのようなものがあるのか、どれを使うかを選択するためのライブラリの特徴などを調べたメモです。
ライブラリの種類¶
- Matplotlib
- Pandas
- Bokeh
- Plotly
- seaborn
- Holoviews
- PyQtGraph
Matplotlib¶
Matplotlibは、Pythonの定番グラフプロットライブラリです。MATLABユーザーにPythonでプロットを提供することが出発点のライブラリで、MATLABの使い方に寄せたコマンド指向のpyplot APIと、プログラミング用のオブジェクト指向のAPIが用意されています。
プロット結果は画像ファイルとして生成するので、インタラクティブな操作は別途プログラミングする必要があります。
numpyパッケージに依存あり。
Pandas¶
Pandasは、Excelのように表形式のデータを解析するライブラリで、グラフプロットの機能も含まれています。内部ではMatplotlibを使用していますが、plotと呼ぶラッパーAPIを用意しており、Matplotlibを直接利用するより簡単にグラフをプロットできるようにしています。
Bokeh¶
Bokehは、インタラクティブなグラフを生成し、拡大・縮小、スライダーによるグラフ操作などができます。HTML+JavaScriptファイルにアウトプットし、Webブラウザ上で表示操作します。Bokehサーバーで動かすとWebブラウザとweb socketで繋がりインタラクティブな処理がサーバー(Python)と連動します。3Dプロット機能がありません。
Plotly¶
Bokehと似たライブラリです。Bokehより高機能で少し使いやすく、少し性能に劣ります。3Dプロット機能を持っており、PandasのDataFrameから簡単にプロットすることができます。
別途Dash(Webフレームワーク)と組み合わせることで、Web対応が可能です。
Holoviews¶
MatplotlibまたはBokehを使い、より高度なグラフを簡単にプロットできるようにするライブラリ。
PyQtGraph¶
C++ GUIライブラリQtをラップしたPySide(またはPyQt)の上でグラフ描画をするライブラリ。とても高速に動く。
ライブラリの選定¶
CSVファイルを読み込みプロットするような場合、Pandasが便利と思います。
数値計算結果をプロットする場合は、Matplotlibを使うか、それをラップするライブラリが良さそうです。
グラフをインタラクティブに操作したい場合、Webブラウザと連携する BokehやPlotlyライブラリのいずれかを使います。
BokehとPlotly¶
ほぼ同水準なので優劣つけ難いところなので、実現したいことに適したものを選ぶことがよいです。
| 項目 | Bokeh | Plotly | コメント |
|---|---|---|---|
| 機能の豊富さ | △ | ○ | Plotlyは、3D描画がある |
| 学習・使い勝手 | ○ | ○ | ほぼ同等、僅差でPlotlyか |
| データハンドリング | ○ | △ | WebSocketを利用するBokehはリアルタイム更新が得意 |
| Web対応 | ○ | ○ | Plotly は別途 汎用WebフレームワークDashと組み合わせてWeb対応可 |
| 大規模データ | ○ | △ | Bokehは、数十万点でも軽快に動作 |
- Pythonでグラフ描画主体であれば Bokeh(+ Bokehサーバー)
- 汎用Webアプリケーションを構築しその中でグラフを使用するなら Plotly + Dash
- 大量のデータをプロットしインタラクティブに操作するなら Bokeh
- リアルタイム更新、サーバー側でセッション保持を使うなら Bokeh
使い方¶