Matplotlibの円グラフ#
公開日
Matplotlibで円グラフを出力するには、ax.pie
を使用します。ax.pie
の引数に数値の配列を与えます。
import matplotlib.pyplot as plt
x = [9, 7, 5, 3]
fig, ax = plt.subplots()
ax.pie(x)
plt.show()
![../_images/c9e458c798b37fafb0678278b6ea5d8670cfd80c71045454936ce8497a728ec1.png](../_images/c9e458c798b37fafb0678278b6ea5d8670cfd80c71045454936ce8497a728ec1.png)
デフォルトの設定では、時計の3時の位置を0度として、半時計周りにプロットします。また、円グラフの中心座標は(0, 0), 半径は1となります。
ax.pieのオプション#
ax.pie
の主なオプションを以下に示します。
labels
(list): データのラベルlabeldistance
(float): ラベルの中心からの距離(デフォルト:1.1)textprops
(dict): テキストの書式を指定colors
(list): グラフの色explode
(list): グラフの要素を中心から切り離すpctdistance
(float): 数値の中心からの距離(デフォルト:0.6)autopct
(str): 割合を表示するshadow
(bool):True
の場合、グラフに影を付ける(デフォルト:False
)startangle
(float): グラフの開始角度(degree, デフォルト:0)counterclock
(bool):True
の場合、データを半時計回りに並べる(デフォルト:True
)wedgeprops
(dict): グラフの要素の書式を指定radius
(float): 円グラフの半径(デフォルト:1)
データのラベル#
labels
オプションにデータのラベルを配列で与えることができます。
labels = ["Alice", "Bob", "Carol", "Dave"]
fig, ax = plt.subplots()
ax.pie(x, labels=labels)
plt.show()
![../_images/a5e7538d021b6ffa6b2023bac208507a7631ffb219d147298b46eeceaf7c5661.png](../_images/a5e7538d021b6ffa6b2023bac208507a7631ffb219d147298b46eeceaf7c5661.png)
フォントの設定を変更するには、textprops
オプションを用います。文字の大きさを変更する場合、以下のようにfontsize
をキーとした辞書形式で与えます。
fig, ax = plt.subplots()
ax.pie(x, labels=labels, textprops={"fontsize": 15})
plt.show()
![../_images/c674044a7080f0158dd3bd84406c1f2bb9e62b91e7887559152528a6926631d9.png](../_images/c674044a7080f0158dd3bd84406c1f2bb9e62b91e7887559152528a6926631d9.png)
グラフの色を変更#
グラフの色を変更するには、色のリストをcolors
オプションに渡します。color
オプションの詳細は以下の記事を参考にして下さい。
colors = ["black", "brown", "pink", "purple"]
fig, ax = plt.subplots()
ax.pie(x, labels=labels, colors=colors)
plt.show()
![../_images/334fe5f7b59a40b3e3883842fbe61cde18bfd5bcc0870fe16ffbc4abcb65d663.png](../_images/334fe5f7b59a40b3e3883842fbe61cde18bfd5bcc0870fe16ffbc4abcb65d663.png)
グラフの要素を切り離す#
グラフの要素を中心から切り離した円グラフを作成するには、explode
オプションを用います。グラフの中心からのオフセット量を配列として与えます。位置を変更しない要素については0
とします。
explode = [0.2, 0.1, 0, 0]
fig, ax = plt.subplots()
ax.pie(x, labels=labels, explode=explode)
plt.show()
![../_images/4e17cd6e0c4db315a7a4c4234879c9403d3fdab58822845a871fe69b8d5a8ae0.png](../_images/4e17cd6e0c4db315a7a4c4234879c9403d3fdab58822845a871fe69b8d5a8ae0.png)
データの割合を表示#
データの割合を円グラフ内に表示するには、autopct
オプションを用います。autopct
に書式を渡します。書式の例を以下の表に示します。
|
例 |
---|---|
|
|
|
|
|
|
|
|
fig, ax = plt.subplots()
ax.pie(x, labels=labels, autopct="%1.1f%%")
plt.show()
![../_images/8f760ae90d179040a1efa2c0b161c6a279b1dd99165cf7f3b05192723e3d70a7.png](../_images/8f760ae90d179040a1efa2c0b161c6a279b1dd99165cf7f3b05192723e3d70a7.png)
また、数値の中心からの距離はpctdistance
オプションで指定可能です(デフォルト値は0.6
)。
fig, ax = plt.subplots()
ax.pie(x, labels=labels, autopct="%1.1f%%", pctdistance=0.8)
plt.show()
![../_images/7a02cc5db2d1f066e8b8d30c9b1b00957dcef9257d054a3d8e10e2e812ee36d5.png](../_images/7a02cc5db2d1f066e8b8d30c9b1b00957dcef9257d054a3d8e10e2e812ee36d5.png)
グラフに影を付ける#
グラフに影を付けるには、shadow=True
とします。
explode = [0.1, 0, 0, 0]
fig, ax = plt.subplots()
ax.pie(x, labels=labels, shadow=True, explode=explode)
plt.show()
![../_images/dd42c70bef7ad4e75d0bb809ec65346a6d0ffdfbdf928acfcd7ba115f17e75f9.png](../_images/dd42c70bef7ad4e75d0bb809ec65346a6d0ffdfbdf928acfcd7ba115f17e75f9.png)
開始角度を変更#
円グラフの開始角度を変更するには、startangle
オプションに開始角度(度)を与えます。デフォルト値は0
で、時計の3時の方向です。startangle
の値が大きいほど、開始角度は半時計回りに増えます。
なお、counterclock=False
としてグラフを時計回りとした場合でも、startangle
オプションには影響しません。
以下は開始角度を90度(時計の12時の位置)とした例です。
fig, ax = plt.subplots()
ax.pie(x, labels=labels, startangle=90)
plt.show()
![../_images/f14a64aba61aa14f0b2f626d43dd5b3777d9913db03fee562f0cb1469d4fed0b.png](../_images/f14a64aba61aa14f0b2f626d43dd5b3777d9913db03fee562f0cb1469d4fed0b.png)
時計回りのグラフ#
グラフを時計回りにするには、counterclock=False
と設定します。
fig, ax = plt.subplots()
ax.pie(x, labels=labels, counterclock=False)
plt.show()
![../_images/e5b75b3a473418f91341557bf5d8424cd65d894555aa666dd099c03a9c73fc48.png](../_images/e5b75b3a473418f91341557bf5d8424cd65d894555aa666dd099c03a9c73fc48.png)
時計回りとして、さらに開始角度を90度(時計の12時の位置)とした円グラフの例を以下に示します。
fig, ax = plt.subplots()
ax.pie(x, labels=labels, startangle=90, counterclock=False)
plt.show()
![../_images/ccb3c3c6e44b0aada76de021614a7140ef3225ba414fc5c91c5659e608a6cc84.png](../_images/ccb3c3c6e44b0aada76de021614a7140ef3225ba414fc5c91c5659e608a6cc84.png)
枠線を付ける#
グラフに枠線を付けるには、wedgeprops
オプションを用います。wedgeprops
は辞書形式で指定し、linewidth
キーに枠線の太さ、edgecolor
キーに枠線の色をそれぞれ指定します。
fig, ax = plt.subplots()
ax.pie(x, labels=labels, wedgeprops={"linewidth": 1.5, "edgecolor": "black"})
plt.show()
![../_images/81f102817e1417d3ae5a408b1f3c26c7148c997972211a131195fdac20e32b86.png](../_images/81f102817e1417d3ae5a408b1f3c26c7148c997972211a131195fdac20e32b86.png)
凡例を表示#
グラフに反映を表示するには、ax.legend
にラベルを渡します。また、bbox_to_anchor
オプションで位置を調整できます。
fig, ax = plt.subplots()
ax.pie(x)
ax.legend(labels, bbox_to_anchor=(1, 0.9))
plt.show()
![../_images/e02d7569c8fbee5ad2c70cea3473a354af20729da8cd388142b2617783e2b687.png](../_images/e02d7569c8fbee5ad2c70cea3473a354af20729da8cd388142b2617783e2b687.png)
ax.legend
の詳細については、以下の記事を参照ください。