棒グラフ

棒グラフは、種別、地域別などのカテゴリーで分けられるデータの特徴を示すグラフである。Python では matplotlib の pyplot.bar を利用する。

行列形式のサンプルデータを読み込んで棒グラフを描く例。サンプルデータは、イネの伸長を測定したものである。5 つの実験群からなり、S2 群と S3 群は欠損値を 1 つずつ含む。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = pd.read_csv("https://stat.biopapyrus.net/data/tseed.csv", dtype = np.float, delimiter = ",")
data.head()
##      At    S5    S4    S3    S2
## 0  1.29  2.25  3.91  4.59  5.58
## 1  0.82  2.31  4.24  4.95  4.26
## 2  0.87  2.40  2.81  4.78  4.19
## 3  1.12  2.49  4.25  4.29  5.78
## 4  1.09  2.58  3.75  5.11  4.10

bar で棒グラフを描く例。棒グラフの高さは、各群の平均値である。

y = data.mean()
x = np.array([1, 2, 3, 4, 5])

plt.bar(x, y, align = "center")
plt.xticks(x, data.columns)
plt.show()
pyplot.bar で描いた棒グラフ

複数の属性からなるデータを横に並べて棒グラフを描くとき、棒の幅を調整して描く。

y1 = np.array([3, 5, 7, 6, 4, 4])
y2 = np.array([2, 2, 6, 8, 5, 7])
x  = np.array([1, 2, 3, 4, 5, 6])

bar_width = 0.4

plt.bar(x, y1, color = "grey", width = bar_width, label = "y1", align = "center")
plt.bar(x + bar_width, y2, color = "black", width = bar_width, label = "y2", align = "center")
plt.legend()
plt.xticks(x + bar_width / 2, ["a", "b", "c", "d", "e", "f"])
plt.show()
pyplot.bar で描いた棒グラフ

次に、積み上げ棒グラフを描く例。棒グラフの底の位置を指定して描く。

y1 = np.array([3, 5, 7, 6, 4, 4])
y2 = np.array([2, 2, 6, 8, 5, 7])
x  = np.array([1, 2, 3, 4, 5, 6])

plt.bar(x, y1, color = "grey", label = "y1", align = "center")
plt.bar(x, y2, bottom = y1, color = "black", label = "y2", align = "center")
plt.legend()
plt.xticks(x, ["a", "b", "c", "d", "e", "f"])
plt.show()
pyplot.bar で描いた棒グラフ

横向きの棒グラフは bar メソッドの代わりに barh メソッドを用いれば描ける。

x = np.array([2.3, 3.2, 4.1, 3.2, 1.1])
y = np.array([1, 2, 3, 4, 5])

plt.barh(y, x, align = "center") 
plt.yticks(y, ["a", "b", "c", "d", "e"])
plt.show()
pyplot.bar で描いた棒グラフ

エラーバーを棒グラフに書き入れる。

data = pd.read_csv("https://stat.biopapyrus.net/data/tseed.csv", dtype = np.float, delimiter = ",")

x = np.array([1, 2, 3, 4, 5])
y = data.mean()
e = np.sqrt(data.var())

plt.bar(x, y, align = "center", yerr = e, ecolor = "black")
plt.xticks(x, data.columns)
plt.show()
pyplot.bar で描いた棒グラフ