当サイトでは実際に購入した商品のみをレビューし、アフェリエイトリンク付きでご紹介しています
【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つを追加する必要があります。
- グラフを作る時点で「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')
変更点のポイント
- make_subplots(specs=[[{“secondary_y”: True}]]) で、y軸を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')
変更点のポイント
- update_xaxesで、showgrid=Falseを渡し、X軸のグリッドを非表示にする
- 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')
変更点のポイント
- update_xaxesに、range=[0, df[“クリック数”].max()*1.05]を追加
- update_yaxesで、range=[0, df[“表示回数”].max()*1.05]を追加
できました!!
まとめ
Plotlyライブラリを使用して、2軸の折れ線グラフを作ることができました。
新しくできることが増えると、嬉しいです。
次の記事で、凡例(ラベル)の移動を試みました。
よろしければ、こちらの記事もご覧ください。
最後まで読んでいただき、ありがとうございました。
みなさまの暮らしがより良くなりますように。