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

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

言語 JA

ドーナツチャート

入門

06.1.3

ドーナツチャート

最終更新 2020-02-26 読了時間 2 分
まとめ
ドーナツチャートは、米国 40%・エマージング 20%・日本 20%・欧州 10%・その他 10% のような構成比を扇形の中心角で見せる円グラフの一種で、真ん中に空白の円があります。plt.pie(x=percent, labels=labels, autopct="%1.0f%%", startangle=90) で円グラフを描き、その上に半径 0.8 の白い plt.Circle を重ねるだけで中央が抜けます。空白そのものに意味はありませんが、「合計 100 万円」のような全体の統計量を書く場所として使えます。カテゴリが 5 個以下で「全体のうちどれだけか」を伝えたいときに向き、角度の微妙な差を比べる用途には 積み上げ棒グラフ や横棒のほうが正確です。

直感 #

投資先の配分が米国 40%、エマージング 20%、日本 20%、欧州 10%、その他 10% だったとします。円グラフがやっていることは、割合に 360° をかけて中心角にし(40% → 144°、10% → 36°)、12 時の位置から順に扇形を切っていくだけです。角度の合計は必ず 360° になるので、「米国が半分近く」「欧州とその他を合わせてもエマージング 1 つ分」という全体の中での位置づけが読めます。ドーナツチャートはその円の中心に白い円を重ねて穴をあけたもので、読み方は円グラフと同じです。

Python で描く #

次のコードは 5 地域の配分を matplotlib.pyplot.pie で円グラフにし、中心に白い円を重ねてドーナツチャートにします。

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

# プロット用のデータ
percent = [40, 20, 20, 10, 10]
explode = [0, 0, 0, 0, 0]
labels = ["米国", "エマージング", "日本", "欧州", "その他"]

percent.reverse()
explode.reverse()
labels.reverse()

# 円グラフを作成
plt.figure(figsize=(7, 7))
plt.pie(x=percent, labels=labels, explode=explode, autopct="%1.0f%%", startangle=90)

# 真ん中に空白の円を追加
background_color = "#fff"
p = plt.gcf()
p.gca().add_artist(plt.Circle((0, 0), 0.8, color=background_color))

plt.show()

ドーナツチャートはmatplotlib.pyplot.pieを使ってpython上でドーナツチャートを作成しますの図

実行結果の読み方 #

12 時の位置から時計回りに米国(40%)、エマージング(20%)、日本(20%)、欧州(10%)、その他(10%)が並び、米国の扇形は中心角 144° で円の 4 割を占めます。エマージングと日本は同じ 72° ですが、角度を見ただけでは同じと断言しにくく、autopct が書いた「20%」の数字で確認する読み方になります。中央の白い円の中には plt.text(0, 0, "合計 100%") のように全体の情報を置けます。

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

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

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

使いどころと落とし穴 #

カテゴリが 5 個以下で、「全体に対してどのくらいか」という割合の感覚を伝えたいときに向いています。ポートフォリオの配分や売上の地域構成のように、合計が 100% になるデータが前提で、複数回答のアンケートのように合計が 100% を超えるデータには使えません。カテゴリ同士の大小を正確に比べたいなら、人の目は角度より長さの比較のほうが正確なので、横棒グラフや 積み上げ棒グラフ に切り替えます。

よくある失敗は 2 つです。1 つはスライスが多すぎること。6 カテゴリ以上に分けると 10% と 12% の扇形の差は見分けられないので、上位 3〜5 カテゴリに絞り、残りは「その他」にまとめます。もう 1 つは 3D 表示で、遠近法で手前の扇形が大きく見え、面積比がデータと一致しなくなります。plt.pie は 2D しか描けないので matplotlib では起きませんが、表計算ソフトの 3D 円グラフは避けてください。