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

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

言語 JA

サンバーストチャートで階層構成を円環で表現

中級

06.1.5

サンバーストチャートで階層構成を円環で表現

最終更新 2026-03-06 読了時間 2 分
まとめ
サンバーストチャートは、事業部 → 部門 → チームのような階層データを同心円のリングに描き、内側のリングが上位階層、外側が下位階層を表す図です。各セクションの中心角が全体に占める割合なので、「プロダクト事業部が 72 人中 37 人で半分強」「その中で開発部門が 25 人」という構成比を階層ごとに同時に読めます。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 階層の同心円を描きます。

 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
28
29
30
31
32
33
import plotly.express as px
import pandas as pd

data = pd.DataFrame([
    # 事業部 → 部門 → チーム
    {"事業部": "プロダクト", "部門": "開発", "チーム": "バックエンド", "人数": 12},
    {"事業部": "プロダクト", "部門": "開発", "チーム": "フロントエンド", "人数": 8},
    {"事業部": "プロダクト", "部門": "開発", "チーム": "インフラ", "人数": 5},
    {"事業部": "プロダクト", "部門": "デザイン", "チーム": "UI", "人数": 4},
    {"事業部": "プロダクト", "部門": "デザイン", "チーム": "UXリサーチ", "人数": 3},
    {"事業部": "プロダクト", "部門": "QA", "チーム": "手動テスト", "人数": 3},
    {"事業部": "プロダクト", "部門": "QA", "チーム": "自動テスト", "人数": 2},
    {"事業部": "ビジネス", "部門": "営業", "チーム": "法人", "人数": 10},
    {"事業部": "ビジネス", "部門": "営業", "チーム": "個人", "人数": 6},
    {"事業部": "ビジネス", "部門": "マーケ", "チーム": "デジタル", "人数": 5},
    {"事業部": "ビジネス", "部門": "マーケ", "チーム": "オフライン", "人数": 3},
    {"事業部": "管理", "部門": "人事", "チーム": "採用", "人数": 4},
    {"事業部": "管理", "部門": "人事", "チーム": "労務", "人数": 2},
    {"事業部": "管理", "部門": "経理", "チーム": "財務", "人数": 3},
    {"事業部": "管理", "部門": "経理", "チーム": "経費", "人数": 2},
])

fig = px.sunburst(
    data,
    path=["事業部", "部門", "チーム"],
    values="人数",
    color="事業部",
    color_discrete_map={"プロダクト": "#2563eb", "ビジネス": "#10b981", "管理": "#f59e0b"},
    title="組織構成サンバーストチャート",
)
fig.update_layout(width=600, height=600, margin=dict(t=50, l=0, r=0, b=0))

fig.show()

組織構成を表すサンバーストチャート

実行結果の読み方 #

内側のリングでは青(プロダクト 37 人)が半分強、緑(ビジネス 24 人)が 3 分の 1、オレンジ(管理 11 人)が残りを占めます。中間のリングを見ると、青の範囲の大半を開発部門(25 人)が占め、最外周のバックエンド(12 人)が全チーム中で最大のセクションです。外側リングの幅から下位チームの相対的な規模感が読め、Plotly の対話版ではプロダクトのセクションをクリックすると、その事業部だけが中心に広がって部門とチームの構成を詳しく見られます。

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

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

見るポイント:構成比は件数ではなく割合で比べる。積み上げると全体(100%)に占める大きさが面積になる。

使いどころと落とし穴 #

予算配分、組織構成、ディスク使用量のように 2〜4 階層のツリー構造があり、各レベルの構成比を同時に見たいときに向いています。階層が 2 までなら ドーナツチャート で十分で、面積を正確に比較したいなら矩形で描く ツリーマップ のほうが適切です。階層が 5 以上になると外側のリングが細くなりすぎて読めず、リーフノードが 50 を超えるとラベルが潰れます。

色の使いすぎが最もよくある失敗で、リーフノードごとに色を変えると 15 色以上になって混乱します。最上位階層(3 事業部)で色分けし、下位は同系色の濃淡にとどめます。小さいセクションのラベルは Plotly が自動で省略しますが、静的画像に書き出すときは textinfo や insidetextorientation で文字の表示と向きを制御しないと、「UXリサーチ」のような長い名前が重なります。