【具体例で解説】Python(matplotlib)で棒グラフを描く

こんにちは、unogram管理人のうのちゅ〜です。

今回は、Python (matplotlib) を使って棒グラフをプロットする方法について、具体例を挙げて解説します。データを数量の推移や比較という観点で示したい場合などに活躍する棒グラフをPythonでサッと描けるようになりましょう。

matplotlibを使った2Dプロットの基礎については、【具体例で説明】Pythonでなるべく簡単にプロットする方法で解説しているので、こちらもご覧ください。

それでは見ていきましょう!

Python (matplotlib) で棒グラフを描く

細かい設定をせず、とにかくプロットする

「とにかく棒グラフとして可視化したい」場合は以下のようにplt.barでプロットできます。この際、ラベルと数量のリストを引数として与えます。

import matplotlib.pyplot as plt

labels = ['group 1', 'group 2', 'group 3', 'group 4']
data1 = [5,7,3,9]
plt.bar(labels, data1)

plt.show()

2つの数量を上下に重ねて表示する

2つの数量を上下に重ねた形で棒グラフを表示したい場合があるかと思います。そんなときは、下側のデータのプロットに続けて上側のデータをプロットします。その際、bottom=data1としてdata2のbottomがdata1の数量の位置からスタートすることを明記する必要があります。

labels = ['group 1', 'group 2', 'group 3', 'group 4']
data1 = [5,7,3,9]
data2 = [9,2,3,1]

plt.bar(labels, data1)
plt.bar(labels, data2, bottom=data1)

plt.show()

エラーバーを表示する

エラーバーを表示したい場合、plt.barの引数に、ラベルと数量に加えてエラーのリストerrをyerr=errとして明記します。

labels = ['group 1', 'group 2', 'group 3', 'group 4']
data1 = [5,7,3,9]
err1 = [1, 3, 1, 2]
plt.bar(labels, data1, yerr=err1)

plt.show()



2つのデータを並べて表示する

2つのデータを並べて棒グラフ表示したい場合、少し複雑になります。ポイントは、横軸方向の位置を明示する必要があるという点です。具体的には、棒の幅を設定し、データプロット時に2つのデータの位置が重ならないようにズラしてプロットする必要があります。

labels = ['group 1', 'group 2', 'group 3', 'group 4']
data1 = [5,7,3,9]
data2 = [9,2,3,1]

x = np.arange(len(labels))  # ラベルの位置を指定
width = 0.3  # 棒の幅

fig, ax = plt.subplots()
ax.bar(x - width/2, data1, width)
ax.bar(x + width/2, data2, width)
ax.set_xticks(x) # ラベルの位置を設定
ax.set_xticklabels(labels) # ラベルを設定

plt.show()

横向きに棒グラフを表示する

横向きの棒グラフで表示したい場合は、ax.bar→ax.barhに変更します。ラベルについても縦軸になるようにx→yに変更します。

fig, ax = plt.subplots()

labels = ['group 1', 'group 2', 'group 3', 'group 4']
y_pos = np.arange(len(labels))
data1 = [5,7,3,9]

ax.barh(y_pos, data1)
ax.set_yticks(y_pos)
ax.set_yticklabels(labels)
#ax.invert_yaxis()  # ラベルの位置を上下逆転させたい場合

plt.show()

まとめ

今回は、Python (matplotlib) を使って棒グラフをプロットする方法について、具体例を挙げて解説しました。matplotlibにはたくさんのプロット方法があるので、少しずつ使いこなせるように勉強していきましょう。

参考書学習は…

matplotlibのみを扱った参考書は少ないですが、numpyやpandasを含めて、データサイエンスに必要なライブラリを詳しく解説する以下の書籍がおすすめです。

Pythonを使った科学技術計算全般について学べる以下の書籍もおすすめです。

参考

Matplotlib: Python plotting