Pythonでグラフを描くときに便利なplotlyですが、初心者にとっては難しいかもしれないですね。
私も初めて使ったときは何が何だかサッパリでしたが、理解できるとサクサクグラフを描くことができます。
今回は初心者向けにplotlyのややこしい使い方をまとめみました。
この記事よ読むと次のことが理解できます。
- plotlyを理解するために必要な用語
- expressとgraph_objectsのコードの違い
- ploltyでグラフを描くときの考え方
- よく使うメソッドとその意味
インストール方法
pipでインストールします。
1 2 |
#pip pip install plotly==4.14.3 |
インストールが完了したらライブラリのインポートです。
1 2 |
import plotly.graph_objects as go import plotly.express as px |
ここでgoとpxの2つをインポートしていますが、使い方が異なるので注意が必要です。
Pythonで図やグラフを描くときにPlotlyを使ったことはありますか? matplotlibが有名なので使っている人が多い印象ですが、Plotlyの方がグラフを動かしたり拡大したりとインタラクティブなので便利です。 そこで[…]
この記事で基本的な考え方や必要な知識を解説していきます。
plotlyの基本
これらが基本的な用語です。
plotlyでは同じグラフでも様々なき方があります。
初心者にとってそれがややこしいところですね。
次のコードも棒グラフを描く一つの例です。今回は上の用語に合わせて一つ一つ丁寧に書いてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import plotly.graph_objects as go #Figureオブジェクト作成 fig = go.Figure() #traceを作成 trace1 = go.Bar(x=[1, 2, 3, 4], y=[1, 4, 9, 16]) #traceをFigureに追加 fig.add_trace(trace1) #レイアウトの設定 fig.update_layout(title='グラフのタイトル', width=1000, height=500) #軸の設定 fig.update_xaxes(title='横軸') fig.update_yaxes(title='縦軸') #グラフの表示 fig.show() |
では、用語の解説を一つ一つ見ていきます。
graph_objectsをインポート
1 |
import plotly.graph_objects as go |
plotly.expressもありますが、goの方が基本を理解しやすいと思います。
expressとのコードの違いは後半で解説します。
Figureオブジェクトを作成
グラフを描く土台となるオブジェクトです。
1 2 |
#Figureオブジェクト作成 fig = go.Figure() |
これで作成できます。
Figure()
には引数を取ることができます。traceのところで解説しています。
trace(グラフオブジェクト)の作成
グラフデータのことだと考えておきましょう。
どんな種類のグラフを使って、どんな値をプロットするのかという情報が格納されています。
1 2 |
#traceを作成 trace1 = go.Bar(x=[1, 2, 3, 4], y=[1, 4, 9, 16]) |
go.Bar
は棒グラフなのでBarオブジェクトがつくられています。
ほかにも、グラフの種類ごとにオブジェクトがわかれています。
散布図(Scatterオブジェクト)、ヒストグラム(Hostogramオブジェクト)、円グラフ(Pieオブジェクト)などです。これらをまとめてtraceと呼んでいるわけですね。
traceの追加
traceを作成したら、Figureに追加しながらグラフを描くことになります。
1 2 |
#traceをFigureに追加 fig.add_trace(trace1) |
traceを追加するためのメソッドは他にもあります。
また、メソッドを使わない方法もあります。
1 2 3 4 5 |
#先にtraceを作成 trace1 = go.Bar(x=[1, 2, 3, 4], y=[1, 4, 9, 16]) #Figureに直接traceを追加 fig = go.Figure(data=[trace1]) |
このようにFigureにはdata引数があり、それにtraceを渡してあげるとメソッドを使わないで書くこともできます。
もっと言うと、わざわざtrace1
を作らなくても次のように書けます。
1 2 3 4 5 6 |
#Figureとtraceを一括作成 fig = go.Figure( data=[ go.Bar(x=[1, 2, 3, 4], y=[1, 4, 9, 16]) ] ) |
書き方がたくさんあるので難しいと感じるかもしれませんが、Figureやtraceの意味を理解しているとわかりやすいですよね。
layoutの設定
update_layout()
メソッドを使います。
1 2 3 4 |
#レイアウトの設定 fig.update_layout(title='グラフのタイトル', width=1000, height=500) |
グラフのタイトルと縦、横の大きさを決めています。
ほかにも様々の引数でフォントや凡例などの設定が可能です。
xaxis、yaxisの設定
update_xaxes()
、update_yaxes()
メソッドを使います。
ちなみに、axisが軸でaxesはその複数形です。
1 2 3 |
#軸の設定 fig.update_xaxes(title='横軸') fig.update_yaxes(title='縦軸') |
軸の設定なので、引数は似ているものが多いです。
layout、xasis、yaxisを一括で書く方法
1 2 3 4 5 6 7 8 9 10 11 |
#layoutの作成 layout = go.Layout( width=1000, height=500, title = dict(text='グラフのタイトル'), xaxis = dict(title='横軸'), yaxis = dict(title='縦軸') ) #レイアウトの設定 fig.update_layout(layout) |
このようにLayoutオブジェクトを作成してから追加することもできます。
この書き方の場合はdict
で書かないといけない引数があるので注意が必要です。
メソッドで一つ一つ追加するもよし、Layoutオブジェクトで一気に追加するもよしです。
trace、layout、xasis、yaxisを一括で書く方法
Figureはdata引数だけでなく、layout引数も持っています。
それにgo.layoutで作ったlayoutオブジェクトを渡してあげましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#Figureに全部組み込む fig = go.Figure( #traceの設定 data=[ go.Bar(x=[1, 2, 3, 4], y=[1, 4, 9, 16]) ], #Layoutの設定 layout=go.Layout( width=1000, height=500, title = dict(text='グラフのタイトル'), xaxis = dict(title='横軸'), yaxis = dict(title='縦軸') ) ) #グラフの表示 fig.show() |
このように書くことでメソッドを一つも使わずにグラフを作ることができます。
もちろん出力結果は最初の棒グラフと同じです。
plotly.expressの使い方
先ほどgoで描いたグラフをexpressで描くと以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import plotly.express as px #Figureとtraceを同時に作成 fig = px.bar(x=[1, 2, 3, 4], y=[1, 4, 9, 16]) #レイアウトの設定 fig.update_layout(title='グラフのタイトル', width=1000, height=500) #軸の設定 fig.update_xaxes(title='横軸') fig.update_yaxes(title='縦軸') #グラフの表示 fig.show() |
Pythonで図やグラフを描くときにPlotlyを使ったことはありますか? matplotlibが有名なので使っている人が多い印象ですが、Plotlyの方がグラフを動かしたり拡大したりとインタラクティブなので便利です。 そこで[…]
goとpxで同じところ
- レイアウトの設定
- 軸の設定
- グラフの表示
これらはgoのときと同じメソッドが使えます。
layoutに関しては別の書き方があります。(後述)
goとpxで異なる点
- plotly.expressをインポートする
- グラフ名の大文字と小文字に注意
- goのとき:
go.Bar()
- pxのとき:
px.bar()
- goのとき:
- pxはFigureオブジェクトを返す。
- pxはlayputも変更可能
インポート名が異なることや大文字と小文字の違は当然ですね。
特に重要な3と4についてみていきましょう。
今回はbarを例に解説していますが、px.scatterやpx.histogramなどでも同じことが言えます。
pxはFigureオブジェクトを返す。
goとの最大の違いは戻り値です。
go.Bar
の戻り値はBarオブジェクトですが、px.bar
の戻り値はFigureオブジェクトです。
1 2 3 4 5 6 7 8 9 10 11 |
#goのとき fig = go.Figure() #Figure作成 trace1 = go.Bar( #trace作成 x=[1, 2, 3, 4], y=[1, 4, 9, 16] ) fig.add_trace(trace1) #traceを追加 #pxのとき fig = px.bar(x=[1, 2, 3, 4], y=[1, 4, 9, 16]) |
goとpxではコードの量が異なります。
公式サイトでもその例が説明されています。
pxはlayputも変更可能
先ほどupdate_layoutメソッドで書いていた部分をpx.barに組み込んでいます。
1 2 3 4 5 6 |
#layoutも一緒にかける fig = px.bar(x=[1, 2, 3, 4], y=[1, 4, 9, 16], title='グラフタイトル', width=1000, height=500 ) |
このような書き方もできますが、すべてのlayoutを設定できるわけではありません。
より細かい設定は必要な場合はメソッドで変更しましょう。
まとめ
今回はploltyの基本とgo、pxのコードの違いを見ていきました。
- Figure、trace、layout、xaxis、yaxisの役割
- trace、layout、xaxis、yaxisのメソッドの意味
- goとpxの戻り値の違い
- goとpxのコード量の違い
人によってコードの書き方が異なるので初心者にとっては難しく感じるかもしれませんが、一つ一つの言葉の意味とコードの役割を理解しておくと簡単にグラフを描くことができます。
goとpxでどちらが優れているということはありません。基本を理解していればどちらでもラクラク書けるはずです。
参考になれば幸いです。