【入門編】Plotlyとは?express・go・dashの違い

Pythonで図やグラフを描くときにPlotlyを使ったことはありますか?

matplotlibが有名なので使っている人が多い印象ですが、Plotlyの方がグラフを動かしたり拡大したりとインタラクティブなので便利です。

そこで、今回はPlotly初心者向けにどういったライブラリなのかの解説をしていこうと思います。

また、少し使ったことがある方ならplotly.graph_objectsplotly.expressをインポートして使ったことがあると思います。

今回はこれらの違いについても解説してきます。

英語ですが公式サイトは以下に紹介しておきます。

Plotlyとは?

PlotlyとはPythonやRでインタラクティブなグラフを作るためのライブリーのことです。

オープンソースなのでコチラ(GitHub)で公開しています。

散布図・折れ線グラフ・棒グラフ・円グラフ・ヒストグラム・ヒートマップなど基本的なグラフはもちろんのこと、3Dグラフやアニメーションなんかも作れるのが魅力ですね。

Plotlyでできること

  • グラフを動かせる
  • 拡大、移動できる
  • 画像で保存できる
  • HTML化できる

これが「インタラクティブ」ということですね。ここがmatplotlibと異なる点ではないでしょうか?

Plotlyを使うための準備

pipかcondaでインストールします。

インストールが完了したらライブラリのインポートです。

ここでgoとpxの2つをインポートしていますが、これが今回の本題です。

これらの違いを解説していきたいと思います。

それぞれ「as px」と「as go」と表されることが多いです。このようにするとコードが短くて済みますね。

goとexpressの違い

ここでは、goとpxにどのような特徴があるのかを書いています。

より詳しい用語の解説や、コードの違いは以下にまとめています。

関連記事

Pythonでグラフを描くときに便利なplotlyですが、初心者にとっては難しいかもしれないですね。 私も初めて使ったときは何が何だかサッパリでしたが、理解できるとサクサクグラフを描くことができます。 今回は初心者向けにplo[…]

Pythonでplotly入門の使い方を徹底解説
モジュール特徴
plotly.graph_objectslow-level API
複雑なグラフを描ける
3Dグラフやアニメーション、複数のグラフを描くなど
plotly.expresshigh-level API
簡単に少ないコードでグラフを描ける

low-levelは開発者向けの細かい設定ができるもので、high-levelとは初心者向けのコードが書きやすいものと言う認識でOKです。

公式サイトでそれぞれのコードの行数の違いを比較しているものがありました。

同じグラフを出力するためのコードですが、明らかに行数が異なりますね。(笑)

plotlyで描いたグラフ
plotlyで描いたグラフ

pxは1行だけで書かれていますが、goの方は7行も書かれています。両方とも同じデータフレームを渡していますが、その扱い方が異なるのでコードの量に差が出てきてしまします。

関連記事

データ分析ではPythonのpandasが有名ですよね。とくに大量のデータを処理できるデータフレーム(DataFrame)は使いこなせると便利です。 そこで今回は、データフレームの作成方法を紹介していきたいと思います。 [it[…]

また、goの方は「update_xaxes」や「update_yaxes」のように軸名を指定しないと表示されないことも、コードが増えてしまう原因といえます。

なら、goを使うとコードが長くなるならpxだけでいいのかというとそうでもありません。両方に長所と短所があります。

plotly.graph_object(go)の特徴

  • 3Dグラフの種類が多い
  • 複数のグラフ(グラフのマトリックス)を描ける

3Dグラフの種類が多い

pxでも3Dグラフを描くことはできますが、goの方が描けるグラフの種類は多いです。

そのうちpxでも描けるようになるかもしれませんが、まだ無理なようですね。

複数のグラフを描ける

Plotlyで複数のグラフをマトリックス形式で表示することを「サブプロット」と言います。

下の画像のように複数のグラフを一度に表示できます。

ploltyのサブプロット
異なる種類のグラフを1枚で表示できる

正確には「from plotly.subplots import make_subplots」とgoを組み合わせて使うことで、上のような複数のグラフを描くことができます。

特に、種類の異なるグラフを複数並べたいときに使います

 
管理人
見栄えがいいのでよく使っています。
画像で保存したいときも複数枚を
一度に収めることができるのでラクですね。

より詳しいサブプロットに関する内容は別記事にしたいと思います。

plotly.express(px)の特徴

  • データフレームからのグラフの作成がラク
  • ファセットプロットが簡単にできる

データフレームからのグラフの作成がラク

上の例でも見たように、データフレームをもとにグラフを描くならpxの方がラクですね。

コードの量が少なくて済みますし、その方が見返したときや他人が見たときに理解しやすいです。

ファセットプロットが簡単にできる

ファセットプロットとは複数のグラフを同じ軸で表示したものです。トレリスプロットやスモールマルチプルとも呼ばれています。

見た目はgoで出てきたサブプロットに似ていますが、pxの場合はすべて同じ種類のグラフになります。

散布図とヒストグラムと3Dグラフを同時に表示することはできません。

1つのデータフレームのある列をグループごとに表示するというイメージですね。

plotly.expressのファセットプロット
ファセットプロットは同じ種類のグラフ

Dashとは?

DashとはWebアプリケーションを作るためのフレームワークです。公式サイトでは以下のように書かれています。

Dash is a productive Python framework for building web analytic applications.

Dashは、Web分析アプリケーションを構築するための生産性の高いPythonフレームワークです。

https://dash.plotly.com/introduction

Plotlyを初めて使うのであれば、FlaskやDjanogと同じフレームワークの仲間であるという認識でOKです。

Webフレームワークの中でもグラフの表示に特化したものがDashということです。

先に紹介しているpxやgoを使うだけなら気にしなくてOKです。

まとめ

いかがでしたか?

今回は初心者向けにPlotlyで使うモジュールの違いについてまとめてみました。

私も最初のころはpxとgoの違いがわからずに使っていました。そのせいで、調べるのに時間がかかったり、そもそもできないことをしようとしていたりとロスがありました。(笑)

時間が無駄にならないように、これからPlotlyデビューする方の参考になれば幸いです。

関連記事

Pythonでグラフを描くときに便利なplotlyですが、初心者にとっては難しいかもしれないですね。 私も初めて使ったときは何が何だかサッパリでしたが、理解できるとサクサクグラフを描くことができます。 今回は初心者向けにplo[…]

Pythonでplotly入門の使い方を徹底解説