Python 応用編 7日目

Pythonには、matplotlib (マットプロットリブ) というグラフ作成ライブラリがあり、各種グラフを作成・可視化することができます
今回は、matplotlibを使って、グラフを表示してみましょう

matplotlibの読み込み

matplotlib を使うには、matplotlib.pyplotをインポートします

import matplotlib.pyplot as plt

asキーワードを利用して、matplotlib.pyplotの別名を付けています
別名をつけることで、長いモジュール名などを短くして参照することができます

棒グラフを表示

棒グラフを描画するメソッドとして、matplotlib.pyplot.barが用意されてます
matplotlib.pyplot.barの使い方は次の通りです

matplotlib.pyplot.bar(left, height, **kwargs)

**kwargsは応用編 1日目で説明した可変長引数を表します
以下の表のキーワード引数が指定できます

■`matplotlib.pyplot.bar`の主要な引数

引数 意味
left (必須) 各棒の X 軸上の値(リストやndarrayなど)
height (必須) 各棒の高さ(リストやndarrayなど)
width 棒の太さ (デフォルト値: 0.8)
color 棒の色(16進数)
edgecolor 棒の枠線の色(16進数)
linewidth 棒の枠線の太さ
tick_label X 軸のラベル(リストで指定する)
align 棒の位置。`edge` (垂直方向の場合:左端, 水平方向の場合:下端) または `center` (中央)を指定。 (デフォルト値: `edge` )

5本の棒グラフを表示するサンプルプログラムを以下に示します

import matplotlib.pyplot as plt

left = [1,2,3,4,5]
height = [100,200,300,400,500]

plt.bar(left,height)
plt.show()
left = [1,2,3,4,5]

X軸に表記するデータをリスト型で定義しています

height = [100,200,300,400,500]

Y軸のデータをリスト型で定義しています

plt.bar(left,height)

matplotlib.pyplot.pltライブラリのbar関数をasキーワードで指定した別名pltで呼び出し、棒グラフを表示しています
必須値のleft、heightを引数に渡しています

plt.show()

matplotlib.pyplot.pltライブラリのshow関数をasキーワードで指定した別名pltで呼び出し、画面に表示しています

棒の色を#0000CCに指定する場合、以下のように記述します

left = [1,2,3,4,5]
height = [100,200,300,400,500]

plt.bar(left,height,color="#0000CC")
plt.show()

【演習問題】

枠線の色や棒の太さ、棒の位置、横軸のラベルなどの引数を渡して、それぞれ変更してみましょう

円グラフを表示

円グラフを描画するメソッドとして、matplotlib.pyplot.pieが用意されています  
matplotlib.pyplot.pie の使い方は次の通りです

matplotlib.pyplot.pie(x, **kwargs)

■`matplotlib.pyplot.pie`の主要な引数

引数 意味
x (必須) 各要素の大きさを配列で指定(リストやndarrayなど)
labels 各要素のラベル(リストやndarrayなど)
colors 各要素の色を指定 (リストやndarrayなど)
startangle 各要素の出力を開始する角度 (デフォルト値: 0)
shadow True に設定すると影を表示。 (デフォルト値: False)
counterclock True に設定すると時計回りで出力。False に設定すると反時計回りで出力 (デフォルト値: True)

ラベルを表示した円グラフのサンプルプログラムを以下に示します

x = [30,20,15,5]
l = ["lable1","label2","label3","label4"]
plt.pie(x,labels=l)
plt.show()
x = [30,20,15,5]

円グラフに与える値をリストで定義します

l = ["label1","label2","label3","lable4"]

ラベル名を設定します

plt.pie(x,labels=l)

円グラフを表示します
円グラフに渡す値と、labelsに[ラベル名のリスト]を渡します

開始角度を設定したサンプルプログラムを以下に示します

x = [30,20,15,5]
l = ["lable1","label2","label3","label4"]
plt.pie(x,labels=l,startangle=90)
plt.show()

グラフの開始角度を設定するには、startangleに数値°を設定します
デフォルトは0°で、時計で言うと3時の位置からとなり、90°は時計で言うと12時から始まり反時計回りのグラフになります

【演習問題】

その他の引数も渡して、それぞれ変更してみましょう

凡例の表示

棒グラフでも円グラフでも凡例を表示することができます
凡例を表示するには以下のように記述します

plt.legend()

凡例を指定したサンプルプログラムを以下に示します

x = [30,20,15,5]
l = ["lable1","label2","label3","label4"]
plt.pie(x,labels=l,startangle=90)
plt.legend(title="legend")
plt.show()

以下は、クラス、国語、算数、社会のデータからクラスごとの平均値を出力し、棒グラフ、円グラフで表示したサンプルプログラムです。
データは応用編 6日目で提示したような方法で作成しました

matplotlib.pyplotを使用すると表示の際、日本語が文字化けしてしまいます
そのため、まず以下を実行し日本語に対応したjapanize-matplotlibモジュールをインストールします

!pip install japanize-matplotlib
実行結果
Collecting japanize-matplotlib
  Downloading japanize-matplotlib-1.1.3.tar.gz (4.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.1/4.1 MB 27.4 MB/s eta 0:00:00
  Preparing metadata (setup.py) ... done
<>
Successfully built japanize-matplotlib
Installing collected packages: japanize-matplotlib
Successfully installed japanize-matplotlib-1.1.3

インストール後、実行結果のように出力されればインストールが成功しています

・棒グラフの積み上げ

各クラスごとに、国語、算数、社会の平均点を積み上げた棒グラフで表示します

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

df = pd.read_csv("kadai2.csv")

result_list = df.groupby('クラス').mean()
print(result_list.columns) # 列の確認
print(result_list.index) # インデックスの確認
print(result_list)

plt.bar(result_list.index,result_list["国語"],label="国語", width=0.5)
plt.bar(result_list.index,result_list["算数"],label="算数", width=0.5,bottom=result_list['国語'])
plt.bar(result_list.index,result_list["社会"],label="社会", width=0.5,bottom=result_list['国語']+result_list['算数'])
plt.legend(loc='center left')
plt.show()

bottom引数を使用して、各棒グラフの開始位置を指定します

bottom=result_list['国語']
bottom=result_list['国語']+result_list['算数']

算数のデータを書く場合、国語のデータ分だけ、開始位置をずらす必要があり、社会のデータを書く場合、国語と算数の累積したデータ分、開始位置をずらす必要があるため、上記のように記述しています

・円グラフ

クラス1の国語、算数、社会の平均点を円グラフで表示します

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

df = pd.read_csv("kadai2.csv")

result_list = df.groupby('クラス').mean()
tensu_list = result_list.loc[1,["国語","算数","社会"]]

plt.pie(tensu_list,labels=["国語","算数","社会"],startangle=90)
plt.legend(title="1組")
plt.show()

【演習問題】

以下の手順に従って、演習を行いましょう

  1. Python 応用編 6日目の演習問題で生成したkadai7.csvを読み込みます
    生成方法はPython 応用編 6日目の演習問題を参照してください
  2. areaごとのageの平均値を計算し、ageの円グラフで表示してみましょう
  3. areaごとの身長の平均値を計算し、棒グラフで表示してみましょう

コメント

この記事へのコメントはありません。

関連記事

Java 応用編 3日目

Java 応用編 2日目

Python 基本編 1日目

PAGE TOP