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/a879168f4337db7a45c56a174c8f0f9b34290216e4c80979abc7f596367a3b92.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/91dd04af7f3095b95dca0f5b978d01eecbf4d5c0dd733016f217e821282fbc67.png

フォントの設定を変更するには、textpropsオプションを用います。文字の大きさを変更する場合、以下のようにfontsizeをキーとした辞書形式で与えます。

fig, ax = plt.subplots()
ax.pie(x, labels=labels, textprops={"fontsize": 15})
plt.show()
../_images/593d9886534a685b88a7edd02c72209fe1238ee3726e1417f9517e7243a26f59.png

グラフの色を変更#

グラフの色を変更するには、色のリストをcolorsオプションに渡します。colorオプションの詳細は以下の記事を参考にして下さい。

Matplotlib 色の書式

colors = ["black", "brown", "pink", "purple"]

fig, ax = plt.subplots()
ax.pie(x, labels=labels, colors=colors)
plt.show()
../_images/12ffa58670fbca67ec61533aa43bd815470962653a962381bd2d59e8c446a108.png

グラフの要素を切り離す#

グラフの要素を中心から切り離した円グラフを作成するには、explodeオプションを用います。グラフの中心からのオフセット量を配列として与えます。位置を変更しない要素については0とします。

explode = [0.2, 0.1, 0, 0]

fig, ax = plt.subplots()
ax.pie(x, labels=labels, explode=explode)
plt.show()
../_images/517d61eb2650fbc653246ca853210d586dd7dded3ba448c89f7f37064dfdeb9c.png

データの割合を表示#

データの割合を円グラフ内に表示するには、autopctオプションを用います。autopctに書式を渡します。書式の例を以下の表に示します。

autopct

%1.0f

38, 29

%1.1f

37.5, 29.2

%1.2f

37.52, 29.21

%1.1f%%

37.5%, 29.2%

fig, ax = plt.subplots()
ax.pie(x, labels=labels, autopct="%1.1f%%")
plt.show()
../_images/c702fb397f1edaa9018a822e8190435c64363daec19a95c5a0cfbcc2d7e5746d.png

また、数値の中心からの距離はpctdistanceオプションで指定可能です(デフォルト値は0.6)。

fig, ax = plt.subplots()
ax.pie(x, labels=labels, autopct="%1.1f%%", pctdistance=0.8)
plt.show()
../_images/1ff9afb04229fb825303a6fa39251107d9566ca010325a61dc5a739b7fbaf7d4.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/304cb1473d0dfd8b4f176c8f6eb8b2f86d4d67c23947c335293ce46abddf3a8c.png

開始角度を変更#

円グラフの開始角度を変更するには、startangleオプションに開始角度(度)を与えます。デフォルト値は0で、時計の3時の方向です。startangleの値が大きいほど、開始角度は反時計回りに増えます。 なお、counterclock=Falseとしてグラフを時計回りとした場合でも、startangleオプションには影響しません。

以下は開始角度を90度(時計の12時の位置)とした例です。

fig, ax = plt.subplots()
ax.pie(x, labels=labels, startangle=90)
plt.show()
../_images/e38f0a2d2788df35b6f39e51fa0575cf819a2f651389adfea4e3e455ebf52c45.png

時計回りのグラフ#

グラフを時計回りにするには、counterclock=Falseと設定します。

fig, ax = plt.subplots()
ax.pie(x, labels=labels, counterclock=False)
plt.show()
../_images/84771a308fcc6af431614f35f0eea7bfe9bcc566befe49fd06d2c68898976430.png

時計回りとして、さらに開始角度を90度(時計の12時の位置)とした円グラフの例を以下に示します。

fig, ax = plt.subplots()
ax.pie(x, labels=labels, startangle=90, counterclock=False)
plt.show()
../_images/a4b268b2d11bcf451c4cb8c128b4998f9fc3fc88ace763b076b374d3e5e4dca5.png

枠線を付ける#

グラフに枠線を付けるには、wedgepropsオプションを用います。wedgepropsは辞書形式で指定し、linewidthキーに枠線の太さ、edgecolorキーに枠線の色をそれぞれ指定します。

fig, ax = plt.subplots()
ax.pie(x, labels=labels, wedgeprops={"linewidth": 1.5, "edgecolor": "black"})
plt.show()
../_images/ceed9c8ec72d1a84609d5fd4f20f31905a8d7ebe0c5d249c898a4705a42c4b55.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/ef928bce3c74b852b24fe6daf1f8ea78325cb5f39c8eb3d6b578bb18b7e871ca.png

ax.legendの詳細については、以下の記事を参照ください。

Matplotlibの凡例の設定