組み込み開発のためのPython · レッスン 140 / 238

Matplotlib Pie Charts:円グラフを作る

円グラフは全体に対するカテゴリ比率を示します。カテゴリ数が多い場合や値が近い場合は比較が難しく、棒グラフの方が読み取りやすいことがあります。

円グラフは全体に対するカテゴリ比率を示します。カテゴリ数が多い場合や値が近い場合は比較が難しく、棒グラフの方が読み取りやすいことがあります。 仕組みだけでなく、検証方法と運用上の注意も具体例で確認します。

円グラフで割合を表す

円グラフは全体を一つの円として、その内訳を扇形の割合で表示します。構成要素の合計が意味のある全体を表し、カテゴリが互いに重複せず、各値が非負である場合に使います。円グラフは正確な角度や面積を比較しにくいため、値が近いカテゴリの順位を比べる用途には向かないことがあります。少数の主要カテゴリを大まかに示す場合に検討し、値の差を正確に比較したいときは棒グラフも作ってください。カテゴリを選んだ理由と全体の定義を明記し、表示から除外したカテゴリがある場合は残余分として示します。

Axes.pieへ値を渡す

Axes.pieはカテゴリごとの値を受け取り、合計に対する扇形を作ります。値の件数とラベルの件数を一致させ、各値が数値で有効な範囲にあることを確認してください。合計がゼロの入力、負の値、NaNをどう扱うかを描画前に検査します。値がすでに割合として与えられている場合でも、合計が100になるか、丸めや欠損の影響を確認しましょう。割合を計算した元データと、円グラフへ渡す配列が同じカテゴリ順であることを確かめます。計算済み比率を別途表示する場合は、Matplotlibが正規化した値との違いを明らかにします。

カテゴリの順序と開始位置

カテゴリの順序は扇形の並びに反映されます。値の大きさ順にする、業務上の順序にするなど、目的に応じた並びを選び、順序の基準を記録してください。startangleは円の開始角度を変え、特定のカテゴリを読みやすい位置へ動かせますが、見た目を操作して特定の割合を強調するために使わないようにします。時計回りに進むか反時計回りかを決める設定も確認します。小さなカテゴリが重なる場合、開始角度だけで解決せず、ラベルを外へ配置する、図を分ける、棒グラフへ変更する方法を検討します。順序変更後も凡例とラベルが値に対応しているか検査します。

割合と数値を表示する

autopctを使うと扇形へ割合を表示できます。小数点以下の桁数を増やしすぎると、元データの精度以上に正確な値を示すように見えるため、適切に丸めてください。割合の合計は丸めにより100パーセントにならない場合があります。表示の定義が件数か割合か、全体の合計はいくつかをキャプションで説明しましょう。カテゴリ名と割合の両方を扇形内へ入れると、細い部分で文字が重なります。小さなカテゴリはラベルや凡例を外側へ配置するか、別の表で正確な値を提示します。表示されたパーセントと元データを比較し、計算の食い違いがないか確かめます。

色とラベルで区別する

各扇形を異なる色で示す場合、カテゴリの数を抑え、色の差が明確なパレットを選びます。色だけで意味を伝えず、カテゴリ名を直接ラベルにするか凡例を加えてください。色の割当てを複数の図で再利用するなら、同じカテゴリは同じ色を保ちます。多くのカテゴリを自動配色すると似た色が隣り合い、凡例との対応が難しくなることがあります。境界線を加えると扇形を区別しやすくなる場合がありますが、細い領域の可視性を確認します。色覚の違いや白黒印刷を考慮し、最終画像を縮小しても各カテゴリの境界と名称が読み取れるか点検します。

小さい割合とラベルの重なり

割合の小さいカテゴリは扇形が狭くなり、内部へラベルや数字を配置できないことがあります。小さいカテゴリを無理に内部へ詰めず、annotateや凡例で外側へ説明する方法があります。複数の小カテゴリを「その他」にまとめる場合、まとめた対象と基準を明記し、重要なカテゴリを隠さないようにします。ラベルが重なった場合に自動で文字を小さくしすぎると読み取れなくなるため、カテゴリ数を減らす、図を分ける、棒グラフにするなどを検討してください。ラベルの配置はデータ更新で変わることがあるため、定期生成する図では複数の分布条件を使って確認します。

explodeやshadowの注意

explodeは指定した扇形を中心から離し、特定カテゴリへ目を向ける表示です。shadowや色の強調も視覚的な目立ち方を変えます。これらの装飾は割合の大きさや重要性そのものを変えませんが、読み手に特別な意味があると感じさせることがあります。選択したカテゴリを強調する根拠を説明し、他の扇形を不当に目立たなくしないようにしてください。強調のための距離や影を過度に大きくすると、面積比較を難しくします。装飾なしの図と比較し、伝えたい内容がより明確になる場合だけ利用します。

データに円グラフが合わない場合

カテゴリが多い、値が似ている、負の値がある、全体の定義が曖昧といった場合、円グラフは適さないことがあります。値の順位や差を正確に比較したいなら棒グラフが読み取りやすく、時系列の変化なら折れ線が適しています。割合の推移を複数期間で比較する場合、円グラフを複数並べると扇形の角度を目で比較しにくいため、積み上げ棒や表を検討します。データの構成が全体の一部だけなら、欠けているカテゴリや分母を示さなければ誤った割合になります。グラフの種類をデータの構造と問いから選び、円グラフを使う理由を説明します。

欠損、負値、合計の確認

円グラフは構成割合を表すため、負値を含むデータを通常の扇形として示せません。欠損値をゼロへ置き換えるとカテゴリが存在しないように見えるため、欠損の意味を確認してください。合計がゼロ、極端に小さい、非有限値を含む場合は描画前にエラーとして扱います。カテゴリの一部を除外するときは分母を変更したか、元の全体に対する割合かを明記します。割合の合計が100パーセントになるか確認し、丸めによる差と計算誤りを区別しましょう。データ取得時点や対象期間がカテゴリ間で揃っているかも検証します。

アクセシビリティと代替表現

円グラフをWebや文書で公開する場合、画像だけで情報を伝えず、代替テキストや本文に主要カテゴリと割合を記載します。色の凡例だけでなくカテゴリ名を示し、白黒や低解像度でも扇形と名称が対応するようにします。画面の読み上げでは扇形の角度を比較できないため、数値を表形式で提供する方法も有効です。色のコントラストとラベルの大きさを確認し、重要な数値が装飾や影に隠れないようにします。表示する値の精度を測定や集計の精度に合わせ、見かけ上の細かな差を誇張しないようにしましょう。

保存と比較の検証

円グラフを保存した後、ラベルの重なり、切れた凡例、値と色の対応を確認します。bbox_inchesやレイアウト設定で余白を調整しても、ファイル寸法が他の図と異なることがあります。複数期間の構成を比較する場合、同じカテゴリ順、色、対象範囲を使ってください。グラフの外観が似ていても分母が異なる場合、割合の比較は適切でない可能性があります。割合の元データ、合計、正規化方法をテストし、図へ表示された値が計算と一致することを確認します。出力ファイルが古い結果のまま残らないよう生成時刻と入力版を記録します。

練習課題:構成比を誠実に伝える

試験結果の成功、再試行、失敗の件数を使って円グラフを作ります。まず全体の件数と各割合を別に計算し、ラベルと丸め桁を決めてください。カテゴリ順、開始角度、色を変えた図を比較し、装飾で印象が変わらないか確認します。失敗が少数でラベルが重なる場合は、凡例や横棒グラフを用いた代替表示も作ります。件数がゼロ、欠損、負値、合計がゼロの入力で、意図しない図を出さずに適切なエラーとなるかテストします。割合の分母、除外対象、図が示す期間を説明文に書き、読み手が全体を正しく理解できるか確認してください。

コード例

手元のPython環境に貼り付ける前に、使用しているPythonの版と対象ライブラリの対応を確認してください。

import matplotlib.pyplot as plt

labels = ["成功", "再試行", "失敗"]
counts = [84, 12, 4]
fig, ax = plt.subplots()
ax.pie(counts, labels=labels, autopct="%.1f%%", startangle=90)
ax.axis("equal")
plt.show()

手を動かす課題

同じ割合を円グラフと棒グラフで表示し、比率や小さいカテゴリを正確に比較できる方法を選んでください。

参考資料

「Python Matplotlib」の章一覧へ