06.1.3
ドーナツチャート
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 で円グラフにし、中心に白い円を重ねてドーナツチャートにします。
| |

実行結果の読み方 #
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 円グラフは避けてください。