LEVEL 7 ・ Excel / Lesson 18

グラフを仕上げて、資料に使う

数値を見やすくし、円グラフや積み上げ棒、2つ並べたグラフを作って、画像として保存します。

目安 20分 ・ インストール不要

このレッスンが終わったら

「グラフには、単位とタイトルを付ける。画像として保存して、資料に貼れる」と言える。

STEP 1

できることを見る

前のレッスンでは、グラフを1つ描きました。今回は、資料にそのまま使えるグラフに、仕上げます。

1枚の画像に、2つのグラフを、並べてみましょう。左は「部署別の売上」(棒グラフ)、右は「商品別の構成比」(円グラフ)です。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_excel("sales.xlsx")
by_dept = df.groupby("部署")["金額"].sum()
by_product = df.groupby("商品")["金額"].sum()

fig, axes = plt.subplots(1, 2, figsize=(10, 4))
axes[0].bar(by_dept.index, by_dept.values)
axes[0].set_title("部署別")
axes[1].pie(by_product.values, labels=by_product.index, autopct="%1.0f%%")
axes[1].set_title("商品別の構成比")
plt.show()
STEP 2

動かしてみる

2つのグラフを、並べて描くグラフ・pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

横に2つ並びました。1枚の画像に、2つのグラフが入っているので、そのまま資料に貼れます。

STEP 3

1行ずつ読む

1行ずつ日本語にしてみる
fig, axes = plt.subplots(1, 2, figsize=(10, 4))「1行2列」の、グラフを描く枠を用意する。全体の大きさは、横10・縦4。枠は axes に入る
axes[0].bar(...)0番目の枠(左)に、棒グラフを描く
axes[0].set_title("部署別")左の枠に、タイトルを付ける
axes[1].pie(values, labels=..., autopct="%1.0f%%")1番目の枠(右)に、円グラフを描く。各部分に、割合(%)を表示する

日本語にすると

1行2列の枠を用意して、左に棒グラフ、右に円グラフを描き、それぞれにタイトルを付けてください。

前のレッスンの plt.bar(...) は、「いま描いている1枚」に描く書き方でした。今回の axes[0].bar(...) は、「どの枠に描くか」を指定する書き方です。枠が2つ以上あるときは、こちらを使います。

STEP 4

1か所だけ変える

① 単位を変える。 「円」だと桁が多くて読みづらいので、「万円」に直します。10000 で割って、縦軸に単位を付けます。

単位を「万円」にするグラフ・pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

② 棒の上に、数字を表示する。 数字が直接見えると、読み取りが楽になります。bar_label を使います。

棒の上に、数字を表示するグラフ・pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

③ 内訳を、積み上げて見せる。 部署の中の、商品の内訳を、1本の棒に積み上げます。(Lesson 16 の、pivot_table で作った表を使います)

積み上げ棒グラフグラフ・pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

④ 画像として保存する。 資料に貼るために、savefig で、画像ファイルに保存します。

画像ファイルとして保存するグラフ・pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

chart.png という画像ができました。(dpi=200 は、きれいさの指定です)自分のパソコンでは、この画像を、ExcelやPowerPointに、そのまま貼れます。

⑤ 「だますグラフ」の例。 縦軸の始まりを、0ではなく、途中の数字にすると、差が実際より大きく見えてしまいます。左右を見比べてください。

縦軸の始まりで、印象が変わるグラフ・pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます

右のグラフでは、総務の棒が、ほとんど消えてしまいました。棒グラフの縦軸は、0から始めるのが、基本です。

STEP 5

自分で書く

お題① 営業部の売上を「万円」にして、表示してください。(47.8)

お題①:営業部の売上を、万円にするpandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます
ヒントを見る

summary["営業"] で営業部の合計が取り出せます。それを 10000 で割って、print で表示します。

答えの例を見る
import pandas as pd

df = pd.read_excel("sales.xlsx")
summary = df.groupby("部署")["金額"].sum()
print(summary["営業"] / 10000)

お題② 部署別の棒グラフに、縦軸の名前「売上(万円)」を付けてください。

お題②:縦軸に名前を付けるグラフ・pandas・サンプルファイル付き
Ctrl / ⌘ + Enter でも実行

この欄では、サンプルファイルが使えます。実行のたびに、ファイルは最初の状態に戻ります。

結果
▶ 実行を押すと、ここに結果が出ます
ヒントを見る

plt.ylabel("売上(万円)") と書きます。

答えの例を見る
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_excel("sales.xlsx")
summary = df.groupby("部署")["金額"].sum() / 10000

plt.bar(summary.index, summary.values)
plt.ylabel("売上(万円)")

print(plt.gca().get_ylabel())
STEP 6

仕事ならどう使う?