Matplotlibの棒グラフ#

公開日

Matplotlibで棒グラフを出力するには、ax.barを使用します。ax.barの最初の引数に横軸方向の位置、2番目の引数に棒の高さをそれぞれ配列で与えます。

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5]) # 横軸の値
y = np.array([5, 3, 7, 4, 6]) # 棒の高さ

fig, ax = plt.subplots()
ax.bar(x, y)
plt.show()
../_images/d86836b8dfd18f4af41e0a1868616924f7aad27246bb6c6b2f2b4807b98a37a4.png

積み上げ棒グラフ#

積み上げ棒グラフを作成する場合、bottomオプションで下になるデータを指定します。

y1 = np.array([5, 3, 7, 4, 5]) # 下側のデータ
y2 = np.array([3, 6, 2, 1, 1]) # 上側のデータ

fig, ax = plt.subplots()
ax.bar(x, y1, label="y1")
ax.bar(x, y2, label="y2", bottom=y1)
ax.legend()
plt.show()
../_images/31a03045d46c95ddfe6bb97bd8e09e9f78bf04f535df0c4a56c982ea9c6d7da1.png

3つ以上のデータを積み上げる場合、以下のように下になるデータを合計する必要があります。

y3 = np.array([3, 1, 2, 3, 2])

fig, ax = plt.subplots()
ax.bar(x, y1, label="y1")
ax.bar(x, y2, label="y2", bottom=y1)
ax.bar(x, y3, label="y3", bottom=y1+y2)
ax.legend()
plt.show()
../_images/648ea3f02ea62591924672a787587670fcc6f11434f642424c473f992dc25e72.png

複数系列の棒グラフ#

複数系列の棒グラフを作成する場合、PandasのDataFrameを使うと便利です。

import pandas as pd

df = pd.DataFrame({"y1": [5, 3, 7, 4],
                   "y2": [3, 6, 2, 1]},
                  index=[1, 2, 3, 4])

df
y1 y2
1 5 3
2 3 6
3 7 2
4 4 1

上のようなDataFrame dfに対し、plot.bar()メソッドを使用します。

fig, ax = plt.subplots()
df.plot.bar(ax=ax)
plt.show()
../_images/0b995326ea40fbe77ef74b9188e714a51531fba6577d7b79f5c06847a2858768.png

棒の太さ・色を変更する#

棒の太さはwidthオプションで指定します。1が最大(隙間なし)、0が最小となります。また、色はcolorオプションで指定します。

fig, ax = plt.subplots()
ax.bar(x, y, width=1, color="orange")
plt.show()
../_images/0245c4577b2c139f553a1c36975e558d44b80f0b65326914e4c36f6c5b1f10c4.png
fig, ax = plt.subplots()
ax.bar(x, y, width=0.1, color="green")
plt.show()
../_images/aa918a309a08deb0f3b98f28788f626ac2d3daadab082f02a82dce6cdae8bd97.png

colorオプションの詳細は以下の記事を参考にして下さい。

Matplotlib 色の書式

以下のようにcolorに色のリストを与えることで、棒ごとに異なる色に指定することも可能です。

fig, ax = plt.subplots()
ax.bar(x, y, color=["blue", "orange", "green", "black", "red"])
plt.show()
../_images/2c9c7dbd47cf3dc4edcdc47f74b346129d8a4d57c01e098c9842b466f12d915f.png

棒に枠線を付ける#

棒に枠線を付ける場合、枠線の色をedgecolor, 枠線の太さをlinewidthで指定します。

fig, ax = plt.subplots()
ax.bar(x, y, edgecolor="black", linewidth=5)
plt.show()
../_images/7dc176eebd68361721d2c31b49999b0fb3fdcbea1e564fa9e967cf0eb188de13.png

横軸のラベル#

横軸にラベルを付ける場合、tick_labelオプションにリストやNumPy配列などで与えます。

fig, ax = plt.subplots()
ax.bar(x, y, tick_label=["Jan.", "Feb.", "Mar.", "Apr.", "May."])
plt.show()
../_images/e67d9262530bd860a3bd14c2e64287b8dd2aff0c9e6c92ef81566fe14e48deed.png

横棒グラフ#

横棒グラフを出力するには、ax.barhを使用します。ax.barhの最初の引数が縦軸方向の位置、2番目の引数が棒の長さとなります。

fig, ax = plt.subplots()
ax.barh(x, y)
plt.show()
../_images/c470e8bb2e1199f7b9e2ecfd819023c47d159832c30d8e983c7ac8afcfb7465c.png