【python】matplotlibで円グラフを描画する方法

この記事ではmatplotlibライブラリを使った円グラフの描画方法をわかりやすく解説します。

基本的な円グラフの描画方法から細かいオプション設定の方法を網羅的に紹介していきます。

サンプルコードをコピペしながらサクサク処理を試せますので、 ぜひ活用してみてくださいね。


目次

matplotlib.pyplot.pie の引数

matplotlib.pyplot.pie の引数は以下の通りです。(引用:matplotlib.pyplot.pie 公式ドキュメント)

引数名意味デフォルト
x各要素の大きさの配列
startangle各要素の出力の開始角度[deg]0
counterclock各要素の出力順序
時計回り:True
反時計回り:False
True
explode要素を円の中心から離して強調
labels各要素のラベル名
rotatelabels各要素に対応するスライスの角度を回転するか
回転する:True
回転しない:False
False
labeldistance表示ラベルの中心からの距離
円の中心0,0〜円周上1.0を目安に指定
1.1
colors各要素の色
autopct各要素の対全体比率を表示None
pctdistance※ 引数autopct利用時のみ
表示する比率ラベルの円の中心からの距離
円の中心0,0〜円周上1.0を目安に指定
0.6
shadow影の有無
影あり:True
影なし:False
False
radius円の半径1
noramalize各要素の合計を1として規格化するか
規格化する:True
規格化しない:False
True
frame座標軸表示の有無
表示する:True
表示なし:False
False
center円グラフの中心座標
(0,0)などのタプル型で指定
(0,0)

基本的な円グラフ

import matplotlib.pyplot as plt

x = [10, 20, 30, 40, 50]
plt.pie(x)
plt.show()

引数を特に指定しない場合、基本的な円グラフはこのように描画されます。


各要素の出力の開始角度[deg] (startangle)

基本的な円グラフでは下図のように水平方向0[deg]が出力の開始角度となっています。

また、後述の引数 counterclockの通り、出力順序は反時計回り方向となっています。

円グラフ描画のデフォルトは、

水平方向0[deg]から反時計回りで順に出力

であることを覚えておきましょう。


それでは、試しに出力の開始角度を変更してみましょう。

import matplotlib.pyplot as plt
 
x = [10, 20, 30, 40, 50]
plt.pie(x, startangle=90)
plt.show()

上図のように、円グラフの出力開始角が反時計回り方向に90[deg]移動しています。


時計回り、反時計回りに出力(counterclock)

続いて、出力順序の方向を変更してみましょう。

import matplotlib.pyplot as plt

x = [10, 20, 30, 40, 50]
plt.pie(x, startangle=90, counterclock=False)
plt.show()

上図のように、出力順序が時計回りになっていることがわかります。


要素を円の中心から離して強調(explode)

要素を強調するため、円の中心から離して描画してみます。

import matplotlib.pyplot as plt
 
x = [10, 20, 30, 40, 50]
point = [0, 0.3, 0, 0, 0]
plt.pie(x, explode=point, startangle=90, counterclock=False)
plt.show()

二つ目の要素が円から離れて強調されていることがわかりますね。

引数explodeで各要素を中心から離す距離を指定しています。

同時に複数の要素を強調することも可能です。

import matplotlib.pyplot as plt
 
x = [10, 20, 30, 40, 50]
point = [0, 0.3, 0, 0.5, 0]
plt.pie(x, explode=point, startangle=90, counterclock=False)
plt.show()

各要素にラベルを指定(labels)

円グラフの各要素にラベルを指定してみます。

import matplotlib.pyplot as plt
 
x = [10, 20, 30, 40, 50]
label = ["A", "B", "C", "D", "E"]
plt.pie(x, labels=label, startangle=90, counterclock=False)
plt.show()

円グラフのそれぞれの要素ラベルが付与されていることがわかります。


ラベルの角度(rotatelabels)

import matplotlib.pyplot as plt
 
x = [10, 20, 30, 40, 50]
label = ["A", "B", "C", "D", "E"]
plt.pie(x, rotatelabels=True, labels=label, startangle=90, counterclock=False)
plt.show()

表示されるラベルが円に沿って傾いていることがわかります。


ラベルの表示位置(labeldistance)

円グラフに表示するラベルの中心からの距離を変更してみましょう。

import matplotlib.pyplot as plt
 
x = [10, 20, 30, 40, 50]
label = ["A", "B", "C", "D", "E"]
plt.pie(x, labels=label, labeldistance=0.75, startangle=90, counterclock=False)
plt.show()

引数labeldistanceを0.75としたことで、ラベルの表示が中心に寄ったことがわかります。

labeldistance0とすると円の中心に、1とすると円周上にラベルが表示されます。

これを目安に適切な数値を設定してみてください。


各要素の色(color)

円グラフの各要素の色を変更してみましょう。

import matplotlib.pyplot as plt
 
x = [10, 20, 30, 40, 50]
label = ["A", "B", "C", "D", "E"]
colors_list = ["#97BFB4", "#F5EEDC", "#DD4A48", "#4F091D", "#2E4C6D"]
plt.pie(x, colors=colors_list, labels=label, startangle=90, counterclock=False)
plt.show()

各要素の色が変わっていることがわかりますね。

matplotlibライブラリで指定できるカラーはこちらが参考になります。


全体に占める割合を表示(autopct)

円グラフの各要素の全体に占める割合(パーセンテージ)を表示させてみましょう。

import matplotlib.pyplot as plt
 
x = [10, 20, 30, 40, 50]
label = ["A", "B", "C", "D", "E"]
colors_list = ["#97BFB4", "#F5EEDC", "#DD4A48", "#4F091D", "#2E4C6D"]
plt.pie(x, autopct="%.1f%%", colors=colors_list, labels=label, startangle=90, counterclock=False)
plt.show()

各要素の全体に占める割合が「%」表記で出力されていますね。

引数autopctに指定する値の表記方法は「%フォーマット」という書式で指定するのが一般的です。

「%フォーマット」について詳しく知りたい方はこちらが参考になると思います。


割合の表示位置(pctdistance)

円グラフに表示されるパーセンテージの、中心からの距離を変更してみます。

import matplotlib.pyplot as plt
 
x = [10, 20, 30, 40, 50]
label = ["A", "B", "C", "D", "E"]
colors_list = ["#97BFB4", "#F5EEDC", "#DD4A48", "#4F091D", "#2E4C6D"]
plt.pie(x, pctdistance=1.3, autopct="%.1f%%", colors=colors_list, labels=label, startangle=90, counterclock=False)
plt.show()

パーセンテージ表示が円の中心から離れていることがわかります。


影を描画(shadow)

円グラフに影を描画してみます。

import matplotlib.pyplot as plt
 
x = [10, 20, 30, 40, 50]
colors_list = ["#97BFB4", "#F5EEDC", "#DD4A48", "#4F091D", "#2E4C6D"]
plt.pie(x, shadow=True, colors=colors_list, startangle=90, counterclock=False)
plt.show()

円グラフの左下に影が描画されていることがわかります。


円の半径(radius)

円グラフの半径を変更してみましょう。

import matplotlib.pyplot as plt
 
x = [10, 20, 30, 40, 50]
colors_list = ["#97BFB4", "#F5EEDC", "#DD4A48", "#4F091D", "#2E4C6D"]
plt.pie(x, radius=0.5, colors=colors_list, startangle=90, counterclock=False)
plt.show()

円グラフの半径を0.5と、デフォルトの半分にした結果です。


円グラフの規格化(normalize)

円グラフはすべての要素の合計を1となるよう規格化して描画されています。

円グラフの規格化を行わずに描画することもできます。

import matplotlib.pyplot as plt
 
x = [0.05, 0.1, 0.25, 0.3]
colors_list = ["#97BFB4", "#F5EEDC", "#DD4A48", "#4F091D", "#2E4C6D"]
plt.pie(x, normalize=False, colors=colors_list, startangle=90, counterclock=False)
plt.show()

円グラフの規格化を行わない場合、上図のように部分的な円グラフを描画することもできます。

しかし、規格化を行わずに円グラフを描画する際には注意点があります。

すべての要素の合計値が1未満でなければなりません


サンプルコードからもわかるように、x = [0.05, 0.1, 0.25, 0.3]となっており合計値は0.7です。

すべての要素の合計値が1以上である場合は、エラーが出てしまいますので注意して下さい。


座標軸を表示(frame)

import matplotlib.pyplot as plt
 
x = [10, 20, 30, 40, 50]
colors_list = ["#97BFB4", "#F5EEDC", "#DD4A48", "#4F091D", "#2E4C6D"]
plt.pie(x, frame=True, colors=colors_list, startangle=90, counterclock=False)
plt.show()

円グラフを描画する座標軸が表示されることがわかります。


中心座標の移動(center)

円グラフの中心座標を移動させてみましょう。

import matplotlib.pyplot as plt
 
x = [10, 20, 30, 40, 50]
colors_list = ["#97BFB4", "#F5EEDC", "#DD4A48", "#4F091D", "#2E4C6D"]
plt.pie(x, center=(5,5), frame=True, colors=colors_list, startangle=90, counterclock=False)
plt.show()

円グラフの中心座標が(5,5)に移動していことがわかります。


まとめ

今回はmatplotlibライブラリを使った円グラフの描画方法をサンプルコードとともに紹介してきました。

ぜひ円グラフの描画の参考にしてみてください。

よかったらシェアしてね!
目次