二軸グラフで異なる指標を同時に表示

中級

6.4.4

二軸グラフで異なる指標を同時に表示

最終更新 2020-03-11 読了時間 1 分
まとめ
  • 二軸グラフで単位の異なる2指標(売上とCVR)を同時に表示する。
  • ax.twinx()で右側に第2軸を追加し、それぞれの系列を描画する。
  • スケールが異なる指標の相関や推移を1枚で比較したいときに使う。

片方の軸で売上高、もう片方でコンバージョン率を表示する例です。Axes.twinx() を使って右軸を追加します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import numpy as np
import matplotlib.pyplot as plt

months = ["Apr", "May", "Jun", "Jul", "Aug", "Sep"]
revenue = np.array([120, 140, 160, 180, 195, 210])
conversion = np.array([2.3, 2.5, 2.7, 2.9, 3.0, 3.2])

fig, ax1 = plt.subplots(figsize=(6.5, 4))
ax2 = ax1.twinx()

ax1.plot(months, revenue, marker="o", color="#2563eb", label="売上")
ax2.plot(months, conversion, marker="s", color="#f97316", label="CVR")

ax1.set_ylabel("売上(百万円)", color="#2563eb")
ax1.tick_params(axis="y", labelcolor="#2563eb")
ax2.set_ylabel("CVR(%)", color="#f97316")
ax2.tick_params(axis="y", labelcolor="#f97316")
ax1.set_title("売上とコンバージョン率の推移")

lines = ax1.get_lines() + ax2.get_lines()
labels = [line.get_label() for line in lines]
ax1.legend(lines, labels, loc="upper left")
ax1.grid(axis="y", alpha=0.3)

fig.tight_layout()

plt.show()

Axes.twinx() を使って右軸を追加しますの図

読み方のポイント #

  • 目盛りの色を線と揃えると軸の対応が分かりやすい。
  • スケールが極端に異なる場合はデータを標準化するか、別図に分けることも検討する。
  • 過剰に使うと混乱を招くので、関係性を強調したい指標に限定する。

いつ使うか #

  • 適している場面: 単位の異なる2つの指標のトレンドを同一時間軸で比較したいとき。
  • 不向きな場面: 2軸のスケールが恣意的に設定できるため、因果関係がないのに相関があるように見せてしまう危険があります。
  • 代替手段: 正規化して同一軸にプロットするか、ファセットで上下に分ける方が誤解を避けられます。

よくある失敗パターン #

  • スケールの恣意的な調整: 2つの Y 軸のスケールを都合よく調整すると、実際には無関係な2指標がぴったり連動しているように見えます。スケールの設定根拠を明記してください。
  • 因果関係の誤認: 2軸のトレンドが一致しているだけで因果関係があると誤解させてしまいます。相関と因果を区別する注釈を加えましょう。