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()

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


コメント