棒グラフ
このレッスンでできるようになること。店舗別の売上を棒グラフで描き、棒の高さをコードで読み返せるようになります。
棒グラフは比較のための図です。並んだ棒の長さを目で比べるのは人間が得意なことなので、「どこがいちばん大きいか」を伝えるならまず棒を選びます。逆に、時間の流れを見せたいときは棒より折れ線が向いています。図の種類は好みではなく目的で決めます。
Python
by_store = df.groupby("店舗")["金額"].sum()
fig, ax = plt.subplots()
ax.bar(by_store.index, by_store.values)描く前に集計しておくのが基本の流れです。matplotlib は与えられた値をそのまま棒にするだけで、集計はしてくれません。第4章で作った groupby の結果が、そのまま棒グラフの入力になります。集計してから描く、この順番を体に入れてください。
棒グラフには並び順という設計判断があります。groupby の結果は店舗名の昇順なので、店舗名の文字の順に棒が並びます。これは比較には向きません。売上の大きい順に並べ替えると、順位が形として伝わります。
Python
by_store = by_store.sort_values(ascending=False)ただし、月のように本来の順序があるものを大きさで並べ替えてはいけません。並べ替えてよいのは、順序に意味が無い分類だけです。
描いた棒は ax.patches で取り出せます。patch は棒1本を表す長方形で、get_height() でその高さ、つまり描かれた値が読めます。
Python
heights = [int(p.get_height()) for p in ax.patches]この読み返しで、集計から描画までの間に取り違えが無かったかを確認できます。棒の順番は描いた順に並ぶので、並べ替えた結果が本当に反映されているかもここで分かります。横軸のラベルは ax.get_xticklabels() から取れますが、まずは高さの読み返しを確実にできるようにしましょう。
要件
- groupby で店舗別の売上合計を求める
- 売上の大きい順に並べ替えてから描く
- ax.bar で棒グラフを描く
- heights は ax.patches から get_height() で読み返す
- matplotlib.use("Agg") を pyplot の import より前に書く
入出力例
draw_store_bar("売上日,店舗,商品名,カテゴリ,数量,金額
2026-01-05,渋谷店,白磁のマグカップ,食器,2,3600
2026-02-03,渋谷店,鋳物ホーロー鍋,調理器具,1,16800
2026-01-06,横浜店,鉄のフライパン,調理器具,1,7800
2026-01-07,大宮店,積み重ね収納ボックス,収納,3,4500
") → {"bar_count":3,"heights":[20400,7800,4500],"labels":["渋谷店","横浜店","大宮店"]}
draw_store_bar("売上日,店舗,商品名,カテゴリ,数量,金額
2026-03-01,大宮店,白磁のマグカップ,食器,5,9000
2026-03-02,横浜店,布製収納バスケット,収納,2,3000
") → {"bar_count":2,"heights":[9000,3000],"labels":["大宮店","横浜店"]}ヒント
編集 ゆめさく編集部