MENU

    【Python】Plotlyで2軸の折れ線グラフを作る方法

     

    Plotlyで、インタラクティブな2軸のグラフを作りたい!

     PythonのPlotlyライブラリを使用して、インタラクティブなグラフを作成します。

     数値が離れた2つデータを使うため、2軸の折れ線グラフに作成します。

    この記事でわかること
    • Plotlyライブラリでの折れ線グラフの作成方法
    • 折れ線グラフを2軸にする方法
    • グリッド表示を消す方法
    • グラフの表示範囲を指定する方法
    目次

    Plotlyの紹介とインタラクティブなグラフの作り方

     

    Plotlyって何?どうやって使うの?

     

    Plotlyの説明や、使い始める方法は前回の記事に記載しています。
    まずは、リンク先の記事をご覧ください。

    解決したい課題と目標

     前回、Plotly.Expressライブラリを使って、サーチコンソールの結果をカンタンにグラフにできました。

     しかし、このグラフは「クリック数」と「表示回数」の数値が大きく違うため、クリック数の変化がわかりづらいです。

     今回は、グラフを2軸にして、「表示回数」「クリック数」両方の変化をわかりやすくします。

    猫の挿絵

    PythonのPlotlyライブラリで2軸のグラフを作る

     

    前回使った「Plotly.Express」 で2軸のグラフは作れる?

     

    調べても、方法が見つかりませんでした。
    Plotly.Expressはシンプルに早くグラフを作るためのライブラリなので、細かい表示設定は苦手なのかもしれません。

    Expressは使わず、標準のPlotlyライブラリなら2軸のグラフが作れます!

     作成の過程をまとめています。

     完成品をすぐに見たい方は、STEP4へどうぞ。

    STEP1:まずはPlotlyでグラフを作ってみよう

    import pandas as pd
    import plotly.graph_objs as go
    
    df = pd.read_csv('★ここは保存したCSVのフルパスに書き換えてください★')
    
    fig = go.Figure()
    
    fig.add_trace(go.Scatter(x=df["日付"], y=df["クリック数"], name="クリック数", line=dict(color="blue")))
    fig.add_trace(go.Scatter(x=df["日付"], y=df["表示回数"], name="表示回数", line=dict(color="purple")))
    
    fig.to_html(include_plotlyjs='cdn',full_html=False).encode().decode('unicode-escape')

     Plotly.Expressライブラリを使用せずに、前回と同じグラフを作成することができました。

     

    この方法も、カンタンですね。

    STEP2:2軸にしてみよう

    これを2軸にするために、2つを追加する必要があります。

    1. グラフを作る時点で「2軸のグラフにするよ」という記述
    2. 「この折れ線は、2つ目の軸で表示するよ」という記述

     反映したソースコードがこちらです。

    import pandas as pd
    import plotly.graph_objs as go
    from plotly.subplots import make_subplots
    
    df = pd.read_csv('★ここは保存したCSVのフルパスに書き換えてください★')
    
    fig= make_subplots(specs=[[{"secondary_y": True}]])
    
    fig.add_trace(go.Scatter(x=df["日付"], y=df["クリック数"], name="クリック数", line=dict(color="blue")))
    fig.add_trace(go.Scatter(x=df["日付"], y=df["表示回数"], name="表示回数", line=dict(color="purple")),secondary_y=True)
                             
    fig.to_html(include_plotlyjs='cdn',full_html=False).encode().decode('unicode-escape')

    変更点のポイント

    1. make_subplots(specs=[[{“secondary_y”: True}]]) で、y軸を2つ使うグラフを作る
    2. 表示回数のadd_trace引数に「secondary_y=True」を追加
     

    2軸になりました!

     しかし、グリッド(格子)がずれていて、まだ見づらいです。

     次にこれを解決します。

    STEP3:グリッド(格子)を非表示にする

     すべてのグリッドを非表示にしてしまいましょう。

    import pandas as pd
    import plotly.graph_objs as go
    from plotly.subplots import make_subplots
    
    df = pd.read_csv('★ここは保存したCSVのフルパスに書き換えてください★')
    
    fig= make_subplots(specs=[[{"secondary_y": True}]])
    
    fig.add_trace(go.Scatter(x=df["日付"], y=df["クリック数"], name="クリック数", line=dict(color="blue")))
    fig.add_trace(go.Scatter(x=df["日付"], y=df["表示回数"], name="表示回数", line=dict(color="purple")),secondary_y=True)
    
    fig.update_xaxes(title="日付",showgrid=False)
    fig.update_yaxes(title="クリック数", showgrid=False)
    fig.update_yaxes(title="表示回数", showgrid=False, secondary_y=True)
    
    fig.to_html(include_plotlyjs='cdn',full_html=False).encode().decode('unicode-escape')

    変更点のポイント

    1. update_xaxesで、showgrid=Falseを渡し、X軸のグリッドを非表示にする
    2. update_yaxesで、showgrid=Falseを渡し、Y軸のグリッドを非表示にする
     

    むむ。0の線がズレたまま、消えません。
    もうひと頑張り。

    STEP4:完成!(表示範囲を設定する)

     Y軸の表示範囲を、0から始まるようにしましょう。

    import pandas as pd
    import plotly.graph_objs as go
    from plotly.subplots import make_subplots
    
    df = pd.read_csv('★ここは保存したCSVのフルパスに書き換えてください★')
    
    fig= make_subplots(specs=[[{"secondary_y": True}]])
    
    fig.add_trace(go.Scatter(x=df["日付"], y=df["クリック数"], name="クリック数", line=dict(color="blue")))
    fig.add_trace(go.Scatter(x=df["日付"], y=df["表示回数"], name="表示回数", line=dict(color="purple")),secondary_y=True)
    
    fig.update_xaxes(title="日付",showgrid=False)
    fig.update_yaxes(title="クリック数", showgrid=False, range=[0, df["クリック数"].max()*1.05])
    fig.update_yaxes(title="表示回数", showgrid=False, secondary_y=True, range=[0, df["表示回数"].max()*1.05])
    
    fig.to_html(include_plotlyjs='cdn',full_html=False).encode().decode('unicode-escape')

    変更点のポイント

    1. update_xaxesに、range=[0, df[“クリック数”].max()*1.05]を追加
    2. update_yaxesで、range=[0, df[“表示回数”].max()*1.05]を追加
     

    できました!!

    猫の挿絵

    まとめ

     Plotlyライブラリを使用して、2軸の折れ線グラフを作ることができました。
     新しくできることが増えると、嬉しいです。

     次の記事で、凡例(ラベル)の移動を試みました。
     よろしければ、こちらの記事もご覧ください。

     最後まで読んでいただき、ありがとうございました。
     みなさまの暮らしがより良くなりますように。

    お役に立てたら幸いです
    目次
    閉じる