Pandasのピボットテーブルを使うと横並びのグラフを数行のコードで作成することができます。matplotlib単体でもできますが、Pandasのほうがより楽にできます。その方法を解説します。
目次
こんなグラフを作りたい
使用頻度高いなのに毎回やり方忘れそうになるのでメモ代わりに。「matplotlib 棒グラフ 並べる」で検索すると、横幅を指定する変数を与えて、人力で横位置を調整している例が結構あったので、Pandasのピボットテーブルを使って面倒な処理を省いてやります。
アリスとボブ、キャロルの3人のテストの得点を1枚の棒グラフで表示します。横軸には名前、縦軸は得点として、教科ごとに棒グラフを並べます。
データは以下のように、教科ごとに集計されていない状態で入力されるものとします。トランザクションデータとでも思ってください。
Name Subject Point
0 Alice English 50
1 Alice Math 80
2 Alice Japanese 80
3 Bob English 70
4 Bob Math 50
5 Bob Japanese 50
6 Carol English 80
7 Carol Math 60
8 Carol Japanese 70
PandasのDataFrameを定義します。説明のためのコードです。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# データを作る(集計されていない状態)
name = ["Alice", "Alice", "Alice", "Bob", "Bob", "Bob", "Carol", "Carol", "Carol"]
subject = ["English", "Math", "Japanese", "English", "Math", "Japanese", "English", "Math", "Japanese"]
point = [50, 80, 80, 70, 50, 50, 80, 60, 70]
df = pd.DataFrame({"Name":name, "Subject":subject, "Point":point})
print(df)
この結果は先程の出力となります。
たった3行でグラフができます。
# 縦軸を点数、横軸を人、教科で横並びにした棒グラフを作りたい
# ピボットにする
pivot = df.pivot_table(values="Point", index="Name", columns="Subject")
pivot.plot.bar()
plt.show()
冒頭のグラフが出てきます。
Pandasのピボット便利!