06.7.3
バンプチャートで順位推移を可視化
ax.plot を呼び、set_ylim(5.5, 0.5) のように上限と下限を逆に渡して軸を反転させるのが唯一のコツです。読み終えると、Q1 で 3 位だった Bravo が Q2 で 1 位に上がった動きを線の交差として読み取り、ブランドやチームのランキング推移を同じ手順で描けるようになります。直感 #
5 つのブランドの四半期売上ランキングを表にすると、Q1 から Q4 まで 4 列の数字が並び、「Charlie はいつ 1 位になったか」を目で追うのに時間がかかります。バンプチャートは各ブランドの順位を点にして四半期をまたいで線でつなぐので、線が上に向かえば順位上昇、下に向かえば下降、2 本の線が交差した場所が追い抜きの瞬間だと読めます。順位は 1 が最上位なので、普通に描くと 1 位が図の一番下に来てしまいます。そこで Y 軸を上下反転させ、1 位を上に置くのがこの図の約束事です。
Python で描く #
次のコードは 5 ブランド × 4 四半期の順位行列 ranks を用意し、ブランドごとに ax.plot でマーカー付きの折れ線を描きます。描いたあとに set_ylim(5.5, 0.5) で Y 軸を反転させると、1 位が上、5 位が下の図になります。
| |

実行結果の読み方 #
図の一番上が 1 位です。Alpha は Q1 に 1 位でしたが Q2 で Bravo に抜かれ、Q3 で Charlie にも抜かれて 3 位まで下がったことが、線が右下へ向かう形と 2 回の交差から読めます。Delta と Echo は 4 位と 5 位を Q3 で入れ替えるだけで、上位 3 ブランドの争いとは別のグループになっています。特定のブランドを強調したいときは、そのブランドだけ linewidth=4 にして他をグレーにすると、線の交差を追いやすくなります。
使いどころと落とし穴 #
バンプチャートは、競合ブランドや製品カテゴリの順位変動を 4〜12 時点で追うときに向いています。同率順位が多いデータでは線が完全に重なって見えなくなるので、rank(method="first") で同率を崩すか、Y 座標に小さな jitter を加えてずらします。順位の背後にある売上額の差が重要なら、値そのものを ax.plot する通常の折れ線グラフの方が定量的な比較ができます。線の端にラベルがないと凡例との照合に手間がかかるため、系列が 6 本を超えるなら Q4 側の点の横に ax.text でブランド名を直接書く方法に切り替えてください。
- スロープグラフ — 2時点間の順位変化を線の傾きで表示
- 複数ラインの推移比較 — 複数系列を同一軸で比較
- ダンベルチャート — 2時点の差分を線と点で強調