MENU

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

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軸の折れ線グラフを作ることができました。
 新しくできることが増えると、嬉しいです。

 このブログのアクセス記録を、Plotlyを使って定期的にまとめていきます。

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

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