Python × グラフ

【基本から解説】Python / matplotlibで複数の円グラフを書く方法

python-pie-chart

本記事では、Python / matplotlibで実例を使って、基本から複数の円グラフを書く方法をご紹介します。

Pythonの実行環境

今回は、以下の実行環境でプログラムを実行しています。

・Python 3.7.6
・Jupyterlab 1.2.6
・Pandas:1.1.2
・matplotlib:3.3.2

本記事では、実例として、アンケート結果を想定した次のデータを用います。

ファイル名は「アンケート結果.xlsx」で、シート名は「Sheet1」です。

■アンケート結果

アンケート結果

 

まずは、ライブラリをインポートし、テストデータをdfとして読み込んでおきます。

import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
%matplotlib inline

df = pd.read_excel('アンケート結果.xlsx', sheet_name = 'Sheet1')

 

※本記事では、Pythonのコードの下のコメントアウトは、出力結果を示しています。

 

Python / matplotlibで円グラフを書く方法【基本形】

まずは、円グラフを書く基本形を見ていきます。

円グラフは、pie()を使って書きます。第一引数に円グラフの元になる値第二引数にその値のラベルを書きます。
ちなみに、pltグラフを書くオブジェクトと思っておくだけで大丈夫です。
また、plt.show()グラフを表示します。

今回は、「はい」が1/7、「いいえ」が4/7、「どちらでもない」が2/7を占める円グラフになります。

plt.pie([1, 4, 2], labels=['はい', 'いいえ', 'どちらでもない'])
plt.show()

 

円グラフ_基本形

円グラフの3つのラベルの割合は、なんとなく想定どおりになったと思います。

ただ、見づらいですよね。

次は、pie()の中で、追加で円グラフの設定を加えていきます。

pie()には、数多くの設定がありますが、最低限の見やすさ、分かりやすさのための設定となります。

 

円グラフの設定pie()での書き方
① 時計の12時の位置を基点にするstartangle=90
② 時計回りでラベルを並べるcounterclock=False
③ グラフに割合を表示するautopct="%1.1f %%"
④ 円グラフの値の区間に若干の隙間を入れるwedgeprops={'linewidth': 2, 'edgecolor':"white"}

 

これらの書き方は、覚える必要はなく、このような設定があることだけ認識して、使う時はコピペでOKです。

実際にコードを書くと、次の通りとなります。

 

plt.pie([1, 4, 2], labels=['はい', 'いいえ', 'どちらでもない'], 
        startangle=90,
        counterclock=False, 
        autopct="%1.1f %%",
        wedgeprops={'linewidth': 2, 'edgecolor':"white"})
plt.show()

 

円グラフ_基本形2
これで円グラフとして見やすくなりましたね。

 

Python / matplotlibで円グラフを書く方法【実例】

それでは次は、アンケート結果の円グラフを書いていきましょう。

まずは、Q1の円グラフを1つを作成していきます。

pie()の第一引数:値、と第二引数:ラベルをどう定義するかを考えます。

Q1の選択肢となっている「a. 利用したい」、「b. どちらともいえない」、「c. 利用したくない」の3つがそれぞれ何個あるかを見ればいいです。

これには、value_counts()を使うのでいいですね。

参考PythonでExcelの特定の列の値の個数を確認する

 

列を指定し、value_counts()を使ってみます。

今回、列はcolumns.values[1](左から2つ目の列)で指定します。

df[df.columns.values[1]].value_counts()
#a. 利用したい        4
#b. どちらともいえない    4
#c. 利用したくない      2

 

これの選択肢の部分は、pie()の第二引数に、数字の部分は、第一引数に設定すれば良いですね。

この2つを次の通りリスト化します。

 

#数字の部分 → 第一引数
df[df.columns.values[1]].value_counts().tolist()
#[4, 4, 2]

#選択肢の部分 → 第二引数
df[df.columns.values[1]].value_counts().index.tolist()
#['a. 利用したい', 'b. どちらともいえない', 'c. 利用したくない']

 

これらを使って、pie()で円グラフを書きます。

 

plt.pie(df[df.columns.values[1]].value_counts().tolist(),
        labels=df[df.columns.values[1]].value_counts().index.tolist(),
        startangle=90,
        counterclock=False, 
        autopct="%1.1f %%",
        wedgeprops={'linewidth': 2, 'edgecolor':"white"})
plt.title(df.columns.values[1])
plt.show()

title()では、グラフのタイトルを指定できます。今回は、df.columns.valuesを用いて、列の項目名としました。

ここでは、plt.title()グラフのタイトルも書いています。

円グラフ_実例

 

これで、アンケート結果のQ1をちゃんと円グラフで書けました。

 

Python / matplotlibで複数の円グラフを書く方法

最後に、一度に複数の円グラフを書く方法をみていきます。

ここでのポイントは2つです。

pltfigaxesに置き換えて、グラフのオブジェクトを複数作る

forループで、グラフの数だけ繰り返し処理を行う。

 

pltをfigとaxesに置き換えて、グラフのオブジェクトを複数作る

まず1つ目については、pltfigaxesに置きかえると、次のように書けます。

最初のplt.subplots()で、figaxesを作っています。

figaxesは他の文字列でもOKです。

fig, axes = plt.subplots()

axes.pie(df[df.columns.values[1]].value_counts().tolist(),
        labels=df[df.columns.values[1]].value_counts().index.tolist(),
        startangle=90,
        counterclock=False, 
        autopct="%1.1f %%",
        wedgeprops={'linewidth': 2, 'edgecolor':"white"})
axes.set_title(df.columns.values[1])
    
plt.show()

 

この結果は、上のQ1の円グラフと同じになります。

plt.subplots()での引数で、nrows=3と指定すると、axesのリストが3つ出来上がります

このaxesのリストの要素で、axes[0].pie()のようにグラフを書けば良いのです。

あと、title()はaxesではset_title()になることに注意してください

 

forループで、複数のグラフを書く繰り返し処理を行う

df.columns.values[1]となっていた箇所を、

df.columns.values[1] → df.columns.values[2] → df.columns.values[3]

とするためにforループを回します。

また、plt.subplots()の引数でfigsize=(25,20)として、グラフの大きさも指定します。

 

fig, axes = plt.subplots(nrows=3, figsize=(25,20))

for i in range(3):
    axes[i].pie(df[df.columns.values[i+1]].value_counts().tolist(),
            labels=df[df.columns.values[i+1]].value_counts().index.tolist(),
            startangle=90,
            counterclock=False, 
            autopct="%1.1f %%",
            wedgeprops={'linewidth': 2, 'edgecolor':"white"})
    axes[i].set_title(df.columns.values[i+1])
    i += 1
    
plt.show()

 

 

円グラフ_複数円グラフ_複数2

 

これで、アンケート結果の複数の質問について、円グラフを作成することができました。

 

以上、Python / matplotlibで複数の円グラフを書く方法を実例を題材にして、説明してきました。

最後まで読んでいただき、ありがとうございました。

よく読まれている記事

se-shikaku 1

  社内SEになるには資格って必要?社内SEでキャリアップするときにおすすめの資格は? 回答としては、 社内SEは、対人スキル、実務での対応力や最新情 ...

社内SEの仕事内容 2

  社内SEってどんな仕事なんだろ~ 検索しても転職サイトの記事ばかりでよく分からない・・   確かにそうですね。。実経験を基に、社内SE( ...

side-work-trial 3

  コロナで会社の経営も不安。。個人でお金稼ぎたいな~ 今、こう考えるサラリーマン、OLの方はごまんといると思います。   僕は、本業では社 ...

adsense-pass 4

【3記事で一発合格】Google AdSense申請に合格したブログ情報 こんにちは、いなサラ(@いなサラ|田舎の情シスサラリーマン)です。 2019年10月5 ...

-Python × グラフ

© 2020 inasala note