K_DM Book
用語集
対象者 標準
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

ダイバージングバーで差分を表す

中級

06.3.5

ダイバージングバーで差分を表す

最終更新 2020-03-25 読了時間 2 分
まとめ
ダイバージングバーは、前年差やスコア差のように正負が混ざった値を、0 の中央線から左右に伸びる横棒で見せる図です。ax.barh に正負そのままの値を渡すと、プラスは右へ、マイナスは左へ自動的に伸びるので、増減の方向を棒の向きで、大きさを棒の長さで同時に読めます。np.where(change >= 0, 緑, 赤) で色を 2 色に分け、ax.axvline(0) で基準線を引くのが描き方の要点です。読み終えると、5 部門の NPS 前年差のような「どこが改善し、どこが悪化したか」を 1 枚で伝えられるようになります。

ax.barh の基本的な使い方は 基本の縦型棒グラフ で押さえてから読むと、このページは色分けと中央線の追加だけに集中できます。

直感 #

営業・開発・サポート・マーケ・管理の 5 部門で、NPS(顧客推奨度)の前年差 +12、−5、+8、−3、+4 を比べたいとします。知りたいのは 2 つ。「上がった部門と下がった部門はどれか」と「上がり幅はどれが大きいか」です。ふつうの棒グラフで絶対値を描くと符号が消えてしまいます。ダイバージングバーは 0 を中央に置き、プラスの棒を右へ、マイナスの棒を左へ伸ばすので、符号は棒の向き、大きさは棒の長さとして別々に読めます。

Python で描く #

次のコードは 5 部門の前年差を ax.barh に渡し、np.where で緑(プラス)と赤(マイナス)に塗り分けたうえで、0 の位置に中央線を引きます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import numpy as np
import matplotlib.pyplot as plt

departments = ["営業", "開発", "サポート", "マーケ", "管理"]
change = np.array([12, -5, 8, -3, 4])  # 前年比 (ポイント)
colors = np.where(change >= 0, "#10b981", "#f87171")

fig, ax = plt.subplots(figsize=(6, 4))
bars = ax.barh(departments, change, color=colors)

ax.axvline(0, color="#9ca3af", linewidth=1)
ax.set_xlabel("前年差(ポイント)")
ax.set_title("部門別 NPS の前年差")
ax.bar_label(bars, fmt=lambda v: f"{v:+.0f}", padding=4)
ax.grid(axis="x", alpha=0.2)

fig.tight_layout()

plt.show()

前年との増減を横向きの棒で表現すると、プラス・マイナスの傾向がすぐに読み取れますの図

実行結果の読み方 #

営業(+12)とサポート(+8)の緑の棒が右に長く伸び、開発(−5)とマーケ(−3)の赤い棒が左に出ています。棒の長さは差の絶対値に比例するので、営業の改善幅は管理(+4)の 3 倍と読めます。中央線を挟んで緑と赤が分かれているため、「5 部門中 3 部門が改善、2 部門が悪化」という結論が数値を読む前に目に入ります。

何が起きているか(ステップで見る) #

コードを読む前に、この手法が図の上で何をしているかを追ってみましょう。「再生」を押すか、スライダーを動かすと 1 手順ずつ進みます。

見るポイント:並べ替えと累積比率で「上位の少数が大半を占めるか」を確認する。

使いどころと落とし穴 #

中央線を 0 に置くのが基本ですが、「目標との差」を描くなら目標値を 0 とみなして差分を渡します。基準は ax.set_xlabel で「前年差」「目標差」と明記します。色はプラスとマイナスで明確に対比するものを選び、#10b981 と #f87171 のように明度も変えておくと、色覚多様性のある読者にも方向が伝わります。差が +1 や −0.5 のように小さいときは棒が短すぎて見えないので、bar_label の数値表示を必ず残すか、パーセントに換算して描きます。

向いている場面は、前年差・目標差・アンケートの賛否のように、中央の基準からの偏りを左右に見せたいときです。値がすべて正なら中央線の左側は空になり、ダイバージングにする意味がないので 横向き棒グラフ で十分です。2 時点の値そのもの(前年 60 と今年 72)を見せたいなら、差ではなく両端を点で結ぶ ダンベルチャート のほうが変化量と水準の両方を伝えられます。