pythonのグラフ描画ライブラリである「matplotlib」で、円グラフを作成する方法について紹介します。
本記事では、下記の内容を紹介しています。
この記事で分かること
- 円グラフの作成方法
- 円グラフを大きい順に並べる【counterclock、startangle】
- 円グラフに割合(数値)を表示【autopct】
- 円グラフにラベルを表示【labels】
- 円グラフにタイトルを表示【plt.title】
- 円グラフのフォントサイズを変更【textprops】
- 円グラフに凡例を表示【plt.legend()】
- 円グラフの色を変更【colors】
- 円グラフをpandasから作成
- 円グラフをcsvファイルから作成
はじめに、基本的な内容として、円グラフを作成する方法を紹介します。
そのあとに、円グラフを割合の大きい順番に並べる方法や、ラベルを表示する方法など、円グラフを見やすく表示する方法について紹介します。
スポンサーリンク
matplotlibで円グラフを作成する方法
matplotlibには、円グラフを作成するメソッドとして、matplotlib.pyplot.pieが用意されています。
matplotlib.pyplot.pie の引数の指定方法について、 公式ドキュメント から引用しました。
matplotlib 公式ドキュメント
"x" は、円グラフ描画用の数値のリストになります。引数として必須となるのは、 "x" だけです。
matplotlib.pyplot.pie の詳しい使用方法については、 公式ドキュメント にて御確認ください。
以下、matplotlib.pyplot.pie を用いて円グラフを作成するサンプルコードです。
### matplotlibで円グラフを作成
import matplotlib.pyplot as plt
x = [80, 50, 30, 20, 10]
plt.pie(x)
plt.show()
コード実行後、表示されるグラフはこちらになります。

> plt.pie( x )
matplotlib.pyplot.pie に、円グラフ生成用のデータ "x"を引数として渡しています。
これだけで円グラフが作成できてしまいます。
ここからは、円グラフを見やすくするために、要素を追加したり変更する方法を紹介します。
スポンサーリンク
matplotlibの円グラフを大きい順に順番に並べる【counterclock、startangle】
先ほどのグラフは、円グラフが0度から始まっており、普段あまり見慣れないグラフになっています。
見慣れた円グラフになるように修正するには、以下の変更を加えます。
- 円グラフを時計回りに並べる
- 円グラフの開始を90度からにする
それぞれの変更方法について順番に紹介します。
時計回りに並べる【counterclock】
要素が時計回りになるようにします。
counterclock=False と指定することで、時計回りにすることができます。
以下、サンプルコードです。
### 時計回りに並べる
import matplotlib.pyplot as plt
x = [80, 50, 30, 20, 10]
plt.pie(x, counterclock=False)
plt.show()
コード実行後、表示されるグラフはこちらになります。

開始角度を90度にする【startangle】
円グラフが90度から始まるようにします。
startangle=90 と指定することで、円グラフを90度から始まるように変更できます。
以下、サンプルコードです。
### 開始角度を90度にする
import matplotlib.pyplot as plt
x = [80, 50, 30, 20, 10]
plt.pie(x, startangle=90)
plt.show()
コード実行後、表示されるグラフはこちらになります。

円グラフを大きい順に順番に並べる
時計回りにして、90度から始めることで、普段見慣れた円グラフにすることができます。
以下、サンプルコードです。
### 円グラフを大きい順番に並べる
import matplotlib.pyplot as plt
x = [80, 50, 30, 20, 10]
plt.pie(x, startangle=90, counterclock=False)
plt.show()
コード実行後、表示されるグラフはこちらになります。

スポンサーリンク
matplotlibの円グラフに割合(数値)を表示【autopct】
次に、円グラフに割合を表示する方法を紹介します。
引数 autopct に、書式指定を渡すことで、割合を表示することができます。
円グラフに割合(数値)を表示【autopctの使い方】
autopct に渡す"書式指定"について、簡単に紹介します。
書式指定は、"%"から始まる文字列で指定します。
以下に、書式指定の例を紹介します。
書式指定 | 表示例 |
---|---|
'%d' | 42 |
'%d%%' | 42% |
'%.1f' | 42.1 |
'%.2f' | 42.11 |
'%.1f%%' | 42.1% |
"d"を指定すると整数になり、".f"を指定すると小数になります。小数の場合は"f"の前の数値で小数点以下の桁数を指定できます。
また、%%とすることで、%を表示できます。
以下、円グラフに割合を表示するサンプルコードです。
### 円グラフに割合(数値)を表示
import matplotlib.pyplot as plt
x = [80, 50, 30, 20, 10]
plt.pie(x, startangle=90, counterclock=False, autopct='%.1f%%')
plt.show()
コード実行後、表示されるグラフはこちらになります。

> plt.pie(x, startangle=90, counterclock=False, autopct='%.1f%%')
書式指定として、 「数点以下の桁数1桁 + % 」となるように、指定しています。
割合(数値)のラベルの位置【pctdistance】
割合の表示位置は、pctdistance で変更できます。
なお、pctdistanceのデフォルトは 0.6 です。
以下、割合のデータラベルの表示位置を変更するサンプルコードです。
### 割合(数値)のラベルの位置
import matplotlib.pyplot as plt
x = [80, 50, 30, 20, 10]
plt.pie(x, startangle=90, counterclock=False, autopct='%.1f%%', pctdistance=0.8)
plt.show()
コード実行後、表示されるグラフはこちらになります。

matplotlibの円グラフにラベルを表示【labels】
円グラフにラベル表示する方法を紹介します。
labels にデータに対応したラベルのリストを渡すことで、ラベルを表示できます。
以下、円グラフにラベルを表示するサンプルコードです。
### ラベルを表示
import matplotlib.pyplot as plt
x = [80, 50, 30, 20, 10]
labels = ['A', 'B', 'C', 'D', 'E']
plt.pie(x, startangle=90, counterclock=False, autopct='%.1f%%', pctdistance=0.8, labels=labels)
plt.show()
コード実行後、表示されるグラフはこちらになります。

ラベルの位置を変更【labeldistance】
ラベルの位置は、 labeldistance で変更できます。
なお、labeldistance のデフォルトは 1.1 です。
以下、円グラフのラベルの位置を変更するサンプルコードです。
### ラベルの位置を変更
import matplotlib.pyplot as plt
x = [80, 50, 30, 20, 10]
labels = ['A', 'B', 'C', 'D', 'E']
plt.pie(x, startangle=90, counterclock=False, autopct='%.1f%%', pctdistance=0.8, labels=labels,
labeldistance=1.2)
plt.show()
コード実行後、表示されるグラフはこちらになります。

スポンサーリンク
matplotlibの円グラフにタイトルを表示【plt.title】
円グラフのタイトルを表示する方法を紹介します。
タイトルは、 matplotlib.pyplot.title( ) で指定します。
以下、円グラフにタイトルを表示するサンプルコードです。
### タイトルを表示
import matplotlib.pyplot as plt
x = [80, 50, 30, 20, 10]
labels = ['A', 'B', 'C', 'D', 'E']
plt.pie(x, startangle=90, counterclock=False, autopct='%.1f%%', pctdistance=0.8, labels=labels,
labeldistance=1.2)
plt.title('Test',fontsize = 18)
plt.show()
コード実行後、表示されるグラフはこちらになります。

> plt.title('Test', fontsize = 18)
タイトルとして表示する文字列と、フォントサイズを指定しています。
matplotlibの円グラフのフォント(文字)サイズを変更【textprops】
円グラフのフォントサイズを変更する方法を紹介します。
引数 textprops に辞書型で設定を渡すことで、テキストに関するさまざまな変更をおこなうことができます。
フォントサイズを変更する場合は、辞書のキーとして、fontsize を指定します。
以下、円グラフのフォントサイズを変更するサンプルコードです。
### フォントサイズを変更
import matplotlib.pyplot as plt
x = [80, 50, 30, 20, 10]
labels = ['A', 'B', 'C', 'D', 'E']
textprops = {'fontsize':15}
plt.pie(x, startangle=90, counterclock=False, autopct='%.1f%%', pctdistance=0.8, labels=labels,
labeldistance=1.2, textprops=textprops)
plt.title("Test",fontsize = 18)
plt.show()
コード実行後、表示されるグラフはこちらになります。

> textprops = {'fontsize':15}
キーとして、fontsizeを指定しています。
フォントサイズ以外にも、ラベルを太字にしたり斜めにすることもできます。
興味のある方はtextpropsの使い方について調べてみてください。
スポンサーリンク
matplotlibの円グラフに凡例(legend)を表示【plt.legend()】
円グラフに凡例を表示する方法を紹介します。
グラフに凡例を表示する方法については、下記の記事で紹介しています。
円グラフで凡例を表示する方法は、他のグラフと変わらないのですが、
ラベルを表示したままだと騒がしいので、下記のサンプルコードでは円グラフの周りのラベルを非表示にしています。
### 凡例(legend)を表示
import matplotlib.pyplot as plt
x = [80, 50, 30, 20, 10]
labels = ['A', 'B', 'C', 'D', 'E']
plt.pie(x, startangle=90, counterclock=False, autopct='%.1f%%', pctdistance=0.8, labels=labels,
labeldistance=None)
plt.legend()
plt.show()
コード実行後、表示されるグラフはこちらになります。

> plt.pie(x, startangle=90, counterclock=False, autopct='%.1f%%', pctdistance=0.8, labels=labels, labeldistance=None)
labelsに凡例として表示したい文字列のリストを渡しています。
labeldistance=None とすることで、円グラフの周りのラベルを非表示にできます。
matplotlibの円グラフの色を変更【colors】
円グラフの色を変更する方法を紹介します。
グラフの色を指定する方法については、下記の記事で紹介しています。
以下、円グラフの色を変更するサンプルコードです。
### 円グラフの色を変更
import matplotlib.pyplot as plt
x = [80, 50, 30, 20, 10]
labels = ['A', 'B', 'C', 'D', 'E']
colorlist = ['b', 'g', 'r', 'tab:cyan', 'teal']
plt.pie(x, startangle=90, counterclock=False, autopct='%.1f%%', pctdistance=0.8, labels=labels,
labeldistance=1.1, colors=colorlist)
plt.show()
コード実行後、表示されるグラフはこちらになります。

カラーマップを使用して、円グラフの色を変更
matplotlibに用意されているカラーマップを利用して、円グラフの色を変更することもできます。
カラーマップを利用してグラフの色を変更する方法については、下記の記事で紹介しています。
matplotlibでカラーマップを利用してグラフの色を変更する方法
以下、サンプルコードです。
### カラーマップを使用して、円グラフの色を変更
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import numpy as np
x = [80, 50, 30, 20, 10]
labels = ['A', 'B', 'C', 'D', 'E']
cmap=plt.get_cmap('Set1')
colorlist = [cmap(i) for i in range(len(x))]
plt.pie(x, startangle=90, counterclock=False, autopct='%.1f%%', pctdistance=0.8, labels=labels,
labeldistance=1.1, colors=colorlist)
plt.show()
コード実行後、表示されるグラフはこちらになります。

> cmap=plt.get_cmap('Set1')
> colorlist = [cmap(i) for i in range(len(x))]
plt.get_cmap('Set1') で、カラーマップ "Set1" を取得しています。
[cmap(i) for i in range(len(x))] で、リスト内包表記で、カラーマップの色をリストとして、データ数分取得しています。
リスト内包表記については、下記の記事で紹介しています。
スポンサーリンク
matplotlibの円グラフをpandas(dataframe)から作成
pythonのデータ解析支援ライブラリである「pandas」を用いて、円グラフを作成する方法について紹介します。
pandasのメソッドとしてplotが用意されており、簡単にさまざまなグラフを作成することができます。
以下、pandasを用いて円グラフを作成するサンプルコードです。
### 円グラフをpandasから作成
import numpy as np
import pandas as pd
x = [80, 50, 30, 20, 10]
labels = ['A', 'B', 'C', 'D', 'E']
col = ['test']
df = pd.DataFrame(data=x, index=labels, columns=col)
df['test'].plot.pie(startangle=90, counterclock=False, autopct='%.1f%%', pctdistance=0.8, labels=labels,
labeldistance=1.1)
データフレームには、下記のようにデータが入っています。

コード実行後、表示されるグラフはこちらになります。

> df['test'].plot.pie(startangle=90, counterclock=False, autopct='%.1f%%', pctdistance=0.8, labels=labels, labeldistance=1.1)
データフレームのうち、円グラフにしたいカラムを指定して、 .plot.pie( ) で円グラフを描画しています。
引数の指定方法は、matplotlibと同じです。
matplotlibの円グラフをcsvファイルから作成
csvファイルから円グラフを作成する方法を紹介します。
csvファイルの読み込み方法は下記の記事で紹介しています。
csvファイルを読み込む方法はいくつかありますが、今回はpandasを用いて読み込みます。
pandasでデータを読み込んだあとは、前述の方法で簡単に円グラフを作成できます。
以下、csvファイルをpandasモジュールで読み込み、円グラフを作成するサンプルコードです。
### 円グラフをcsvファイルから作成
import matplotlib.pyplot as plt
import pandas as pd
import pathlib
path_dir = pathlib.Path(r'test')
name_file = 'test.csv'
path_file = path_dir.joinpath(name_file)
df = pd.read_csv(path_file, index_col=0)
df['test2'].plot.pie(startangle=90, counterclock=False, autopct='%.1f%%', pctdistance=0.8, labels=df.index,
labeldistance=1.1)
下記のcsvファイルを読み込みます。

コード実行後、表示されるグラフはこちらになります。

> path_dir = pathlib.Path(r'test')
> name_file = 'test.csv'
>path_file = path_dir.joinpath(name_file)
pathlibモジュールを用いて、csvファイルのパスを作成しています。
pathlibモジュールは、パスをオブジェクトとして操作できるモジュールです。下記の記事で操作方法を紹介しています。
> df = pd.read_csv(path_file, index_col=0)
pandasで、csvファイルを読み込んでいます。
> df['test2'].plot.pie(startangle=90, counterclock=False, autopct='%.1f%%', pctdistance=0.8, labels=df.index, labeldistance=1.1)
labelsに、df.indexを渡しています。
スポンサーリンク