06.1.5
サンバーストチャートで階層構成を円環で表現
plotly.express.sunburst(data, path=["事業部", "部門", "チーム"], values="人数") の 1 行で 3 階層が描かれ、color="事業部" で最上位階層ごとに色が分かれます。Plotly の対話版ではセクションをクリックすると、そこを新たな中心にドリルダウンできます。直感 #
72 人の会社が 3 事業部・7 部門・15 チームに分かれているとします。組織図では人数の大小が見えず、円グラフ 1 枚では 1 階層しか描けません。サンバーストチャートは円グラフを入れ子にし、中心から外へ向かって事業部・部門・チームのリングを重ねます。各セクションの角度は人数に比例するので、プロダクト事業部(37 人)の扇形が半分強を占め、その外側に開発 25 人・デザイン 7 人・QA 5 人の部門が、さらに外側に 7 つのチームが同じ角度の範囲内に並びます。角度を見れば割合、リングを見れば階層が読めます。
Python で描く #
次のコードは 15 チームの人数を DataFrame にまとめ、px.sunburst で 3 階層の同心円を描きます。
| |

実行結果の読み方 #
内側のリングでは青(プロダクト 37 人)が半分強、緑(ビジネス 24 人)が 3 分の 1、オレンジ(管理 11 人)が残りを占めます。中間のリングを見ると、青の範囲の大半を開発部門(25 人)が占め、最外周のバックエンド(12 人)が全チーム中で最大のセクションです。外側リングの幅から下位チームの相対的な規模感が読め、Plotly の対話版ではプロダクトのセクションをクリックすると、その事業部だけが中心に広がって部門とチームの構成を詳しく見られます。
何が起きているか(ステップで見る) #
コードを読む前に、この手法が図の上で何をしているかを追ってみましょう。「再生」を押すか、スライダーを動かすと 1 手順ずつ進みます。
見るポイント:構成比は件数ではなく割合で比べる。積み上げると全体(100%)に占める大きさが面積になる。
使いどころと落とし穴 #
予算配分、組織構成、ディスク使用量のように 2〜4 階層のツリー構造があり、各レベルの構成比を同時に見たいときに向いています。階層が 2 までなら ドーナツチャート で十分で、面積を正確に比較したいなら矩形で描く ツリーマップ のほうが適切です。階層が 5 以上になると外側のリングが細くなりすぎて読めず、リーフノードが 50 を超えるとラベルが潰れます。
色の使いすぎが最もよくある失敗で、リーフノードごとに色を変えると 15 色以上になって混乱します。最上位階層(3 事業部)で色分けし、下位は同系色の濃淡にとどめます。小さいセクションのラベルは Plotly が自動で省略しますが、静的画像に書き出すときは textinfo や insidetextorientation で文字の表示と向きを制御しないと、「UXリサーチ」のような長い名前が重なります。
- ツリーマップ — 階層構造を矩形の面積で表現
- ドーナツチャート — 1 階層の構成比を円で表示
- サンキーダイアグラム — 階層間のフローを帯で表現