3秒でわかる
matplotlib で棒グラフを描く関数。カテゴリごとの大小をそのまま高さで見せたいときに使い、集計結果の確認に向きます。
もう少し詳しく
どういうものか
plt.bar は matplotlib の関数で、横に並べたラベルと、それぞれの値を渡すと棒グラフを描きます。第 1 引数がラベル、第 2 引数が高さです。
import matplotlib.pyplot as plt
shops = ["新宿", "渋谷", "池袋", "上野"]
sales = [820, 640, 710, 390]
plt.bar(shops, sales, color="#0071E3")
plt.ylabel("売上 (万円)")
plt.title("店舗別売上")
plt.show()横向きにしたいときは plt.barh を使います。ラベルが長い日本語のときは、横向きのほうが読めます。
なぜ必要か
数字の表は、桁を目で追わないと大小が分かりません。棒グラフにすると「どれが一番大きいか」「差がどれくらいか」を一目で判断できます。集計した直後に描いて、明らかにおかしい値が混ざっていないかを確かめる用途にもよく使います。
具体例
pandas の集計結果をそのまま渡す形が実務では一番多いです。
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("orders.csv")
by_cat = df.groupby("category")["amount"].sum().sort_values(ascending=False)
plt.bar(by_cat.index, by_cat.values)
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig("by_category.png", dpi=150)sort_values で並べ替えてから描くと、順位が読み取れる図になります。
つまずきやすいところ
日本語のラベルが四角の豆腐になる問題が最初に来ます。日本語フォントを指定すれば直ります。
plt.rcParams["font.family"] = "Hiragino Sans"もうひとつ、plt.show() を呼んだ後に plt.savefig() を書くと、白紙の画像が保存されます。show で描画内容が破棄されるためで、保存が先、表示が後です。
似た用語との違い
| 関数 | 向いているデータ |
|---|---|
plt.bar | 店舗別、カテゴリ別など、順番に意味が無い分類 |
plt.plot | 日次売上など、連続して変化する値 |
plt.hist | 点数の分布のように、値を区間で数えたいとき |
分類が 10 個を超えると棒が細くなって読めません。上位 10 件に絞るか barh に変えます。