プロジェクト

全般

プロフィール

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

使い方


18日前に更新