06.3.5
ダイバージングバーで差分を表す
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 の位置に中央線を引きます。
| |

実行結果の読み方 #
営業(+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)を見せたいなら、差ではなく両端を点で結ぶ ダンベルチャート のほうが変化量と水準の両方を伝えられます。
- 横向き棒グラフ — ラベルが長い項目を横向きで比較
- ダンベルチャート — 2時点の差分を線と点で強調
- ウォーターフォールチャート — 増減要因を段階的に積み上げ