PythonのPandasを使って円グラフ(pie chart)を表示する方法について、基本から応用まで体系的に詳しく解説します。
目次
円グラフの基本的な描画方法(plot.pie()
)
Pandasには、Seriesオブジェクトに対して直接plot.pie()
メソッドを使って円グラフを描画する機能があります。
import pandas as pd
import matplotlib.pyplot as plt
# データ準備(例:フルーツの売上)
data = {'りんご': 30, 'バナナ': 20, 'みかん': 50}
series = pd.Series(data)
# 円グラフの表示
series.plot.pie(autopct='%1.1f%%', startangle=90, counterclock=False)
plt.title('フルーツの売上割合')
plt.ylabel('') # y軸ラベルは不要なので空に
plt.show()
解説
autopct='%1.1f%%'
:各要素の割合を表示(1桁の小数)startangle=90
:最初の要素を90度の位置から描画(見やすさ向上)counterclock=False
:時計回りに描画ylabel('')
:不要なy軸ラベルを非表示に
DataFrameのデータを円グラフにする方法
Seriesではなく、DataFrame
から特定の列だけを円グラフにすることも可能です。
df = pd.DataFrame({
'果物': ['りんご', 'バナナ', 'みかん', 'ぶどう'],
'売上': [30, 20, 50, 10]
})
# Seriesに変換して円グラフ化
df.set_index('果物')['売上'].plot.pie(
autopct='%1.1f%%',
startangle=90,
counterclock=False,
figsize=(6, 6)
)
plt.title('果物別売上割合')
plt.ylabel('')
plt.show()
各セグメントを強調(explodeの使用)
特定のセグメントを「飛び出させて強調」するには explode
パラメータを使います。
explode = [0.1, 0, 0, 0] # 最初の要素「りんご」だけを強調
df.set_index('果物')['売上'].plot.pie(
autopct='%1.1f%%',
startangle=90,
explode=explode,
shadow=True
)
plt.title('りんごを強調した円グラフ')
plt.ylabel('')
plt.show()
カラーのカスタマイズ
円グラフの色を自由に設定したい場合は、colors
オプションを使います。
colors = ['#ff9999','#66b3ff','#99ff99','#ffcc99']
df.set_index('果物')['売上'].plot.pie(
colors=colors,
autopct='%1.1f%%',
startangle=90
)
plt.title('カスタムカラーの円グラフ')
plt.ylabel('')
plt.show()
欠損値(NaN)がある場合の対処
欠損値(NaN
)があると、エラーや不正なグラフになります。dropna()
で除外しましょう。
series = pd.Series({'りんご': 30, 'バナナ': None, 'みかん': 50})
series.dropna().plot.pie(autopct='%1.1f%%')
plt.title('NaNを除いた円グラフ')
plt.ylabel('')
plt.show()
複数の円グラフ(サブプロット)
DataFrameに複数の列がある場合、それぞれに対して個別に円グラフを描画することもできます。
df = pd.DataFrame({
'A支店': [30, 20, 50],
'B支店': [40, 10, 50]
}, index=['りんご', 'バナナ', 'みかん'])
df.plot.pie(
subplots=True,
figsize=(12, 6),
autopct='%1.1f%%',
startangle=90
)
plt.suptitle('支店別売上構成')
plt.show()
よくあるエラーと対策
エラー・現象 | 原因 | 解決策 |
---|---|---|
ValueError: Wedge sizes 'x' must be non negative values | データに負の値が含まれている | 負の値を取り除くか別のグラフで代用 |
TypeError: pie() got an unexpected keyword argument 'xlabel' | DataFrameのplot() をそのまま使っている | Series.plot.pie() を使う or .set_index() してから使用 |
円グラフがつぶれて表示 | figsizeが正方形でない | figsize=(6, 6) などで調整 |
まとめ
項目 | 内容 |
---|---|
メソッド | Series.plot.pie() を使う |
デザイン調整 | autopct , startangle , colors , explode , shadow |
推奨される使い方 | 割合が5〜10項目以内で明確な分類があるデータに使用 |
補足 | 多すぎるカテゴリには不向き。棒グラフや積み上げグラフの方が視認性が高いことも |
以上、PythonのPandasで円グラフを表示する方法についてでした。
最後までお読みいただき、ありがとうございました。