Plotly graph_objectsの設定#

※記事内に商品プロモーションを含むことがあります。

公開日

Pythonのインタラクティブなグラフを描画できるライブラリPlotlyにて、graph_objectsを使ったグラフの設定方法を解説します。

Plotlyには、高水準のAPIであるPlotly Expressと呼ばれるものもありますが、 この記事では細かい調節ができるgraph_objectsを対象としています。

graph_objectsの基礎#

graph_objectsを使った簡単なグラフ描画の例を以下に示します。

import plotly.graph_objects as go

fig = go.Figure(
    data=go.Bar(x=[1, 2, 3], y=[1, 3, 2]),
    layout={
        "title": "Graph Title",
        "xaxis": {"title": "X AXIS"},
        "yaxis": {"title": "Y AXIS"},
    },
)

fig.show()

上の例を解説します。 まず、import plotly.graph_objects as gograph_objectsをインポートします。 次に、go.Figure()でグラフを作成します。 go.Figure()には主に以下の引数があります。

  • data: グラフに表示するデータ

  • layout: グラフの表示を制御

data引数には、go.Bar(棒グラフ)やgo.Scatter(散布図、折れ線グラフ)などのオブジェクト、またはこれらのオブジェクトをリストやタプルで与えることができます。

layout引数には、辞書形式や、go.Layoutオブジェクトを与えることができます。

最後にfig.show()を実行してグラフを描画します。

グラフの種類#

Plotlyの主なグラフを以下に示します(go.Scatter, go.Barのように利用します)。

2次元グラフ

  • Scatter: 散布図、折れ線グラフ

  • Bar: 棒グラフ

  • Pie: 円グラフ

  • Heatmap: ヒートマップ

  • Box: 箱ひげ図

  • Violin: ヴァイオリンプロット

  • Histogram: ヒストグラム

3次元グラフ

  • Mesh3d: 3次元の立体表面

  • Scatter3d: 3次元散布図

  • Surface: サーフェスプロット

layoutオプション#

主なlayoutオプションを以下に示します。

  • title (str): グラフのタイトル

  • xaxis/yaxis: x軸、y軸

    • title (str): x軸、y軸のタイトル

    • range (tuple): 軸の範囲

  • legend: 凡例

    • title (str): 凡例のタイトル

titlexaxis/yaxisにはfontオプションで以下を指定できます。

  • size (int): フォントサイズ

  • color (str): 文字色

複数系列のグラフ#

複数系列のグラフをプロットするには、go.Figuredata引数にグラフデータをリストやタプルで複数与えます。 name引数に系列名を与えることができます。

fig = go.Figure(
    data=[
        go.Bar(x=[1, 2, 3], y=[1, 3, 2], name="Series 1"),
        go.Bar(x=[1, 2, 3], y=[3, 2, 1], name="Series 2"),
    ],
)
fig.show()

もしくはadd_trace(), add_traces()メソッドを使用して、go.Figureに後からグラフデータを追加することもできます。

  • add_trace()メソッド:グラフデータのインスタンスを1個だけ追加する。

  • add_traces()メソッド:グラフデータのインスタンスをリストやタプルで複数追加する。

上記と同じ結果を以下で再現できます。

add_trace()メソッドの例:

fig = go.Figure()
fig.add_trace(go.Bar(x=[1, 2, 3], y=[1, 3, 2], name="Series 1"))
fig.add_trace(go.Bar(x=[1, 2, 3], y=[3, 2, 1], name="Series 2"))
fig.show()

add_traces()メソッドの例:

fig = go.Figure()
fig.add_traces(
    [
        go.Bar(x=[1, 2, 3], y=[1, 3, 2], name="Series 1"),
        go.Bar(x=[1, 2, 3], y=[3, 2, 1], name="Series 2"),
    ]
)
fig.show()

レイアウトの設定#

グラフのレイアウトを変更するには、go.Figurelayoutオプション以外に以下のメソッドで後から変更できます。

  • update_layout(): グラフ全体のレイアウト

  • update_xaxes(): x軸の設定

  • update_yaxes(): y軸の設定

各メソッドで指定できるオプションを以下に示します。

update_layout#

  • showlegend (bool): Falseにすると凡例を非表示にする

  • title (str): グラフ全体のタイトル

  • width (float): グラフ全体の横幅

  • height (float): グラフ全体の高さ

  • hovermode: Falseにするとカーソルをあてたときにデータを表示しない

  • template (str): 表示スタイルを指定。

templateは以下から指定できます(デフォルトはplotly)。

'ggplot2', 'seaborn', 'simple_white', 'plotly', 'plotly_white',
'plotly_dark', 'presentation', 'xgridoff', 'ygridoff', 'gridon', 'none'

update_xaxes/yaxes#

  • title (str): 軸のラベル

  • range (tuple, list): 軸の範囲

  • rangeslider (dict): {"visible":True}とするとレンジスライダーを表示

レンジスライダーの例を以下に示します。下側のつまみを左右に動かすことにより、上側のグラフを拡大・縮小できます。

fig = go.Figure()
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[1, 3, 2], name="Series 1"))
fig.add_trace(go.Scatter(x=[1, 2, 3], y=[3, 2, 1], name="Series 2"))
fig.update_xaxes(rangeslider={"visible":True})
fig.show()

グラフのフォント#

グラフ中のフォントを変更する例を示します。 以下ではフォントサイズを30, 文字色を赤としています。

fig = go.Figure(
    data=go.Bar(x=[1, 2, 3], y=[1, 3, 2]),
    layout={
        "title": {
            "text": "Graph Title",
            "font": {
                "size": 30,
                "color": "red",
            },
        },
    },
)
fig.show()