棒グラフの描き方まとめ【matplotlib】

matplotlibの棒グラフの描き方の記事のアイキャッチmatplotlib

棒グラフの基本

縦棒グラフ

棒グラフはbar(x, height)を用いることで、描画することができる
xは横軸の位置、heightは棒の高さを表している

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-3, 3)
height = np.arange(4, 10)
plt.bar(x, height)
plt.show()
縦棒グラフ

横棒グラフ

横棒グラフを描画したい時はbarh(y, width)を使う
yは縦軸の位置、widthは棒の横幅を表している

ちなみにbarhのhはhorizontal(水平)のhらしい

import matplotlib.pyplot as plt
import numpy as np

y = np.arange(-3, 3)
width = np.arange(4, 10)
plt.barh(y, width)
plt.show()
横棒グラフ

積み上げ棒グラフ

積み上げ棒グラフにするにはbottomを利用する

上の棒グラフを描画する際にbottomに下の棒グラフのheightを与える

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-3, 3)

height1 = np.arange(4, 10)
plt.bar(x, height1)

height2 = np.arange(15, 4, -2)
plt.bar(x, height2, bottom=height1)
plt.show()
積み上げ棒グラフ

bottomは指定した値だけ下に空白を埋めてくれる
bottomを使わなければ、2つのデータが重なって表示されてしまう

height1を描画しなければ、bottomの動作がわかりやすい

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-3, 3)

b = np.arange(4, 10)
height2 = np.arange(15, 4, -2)
plt.bar(x, height2, bottom=b)
plt.show()
下に空白を入れた棒グラフ

複数系列

複数系列の場合はwidthを利用して横軸の値を変えることで、2つの系列が並んで表示されるようにする

表示する位置をwidth/2だけずらすことによって、ちょうど2つの系列が並んで表示される

import matplotlib.pyplot as plt
import numpy as np

men = [40, 55, 56, 58, 54]
women = [37, 46, 47, 45, 44]

x = np.arange(len(men))
width = 0.35

plt.bar(x - width/2, men, width)
plt.bar(x + width/2, women, width)

plt.show()
複数系列の棒グラフ
Grouped bar chart with labels — Matplotlib 3.7.1 documentation

棒グラフのカスタマイズ

棒グラフの色を変更するにはcolorを使う

plt.bar(x, height, color='skyblue')
色を変えた棒グラフ

指定可能な色はこちら

棒グラフの間隔を調整

widthは棒グラフの幅を決定するパラメータでデフォルトは0.8
ちなみに横棒グラフの場合はheightを使う

width=1.0とすると、棒グラフが密着する
width=1.0で密着するのは棒グラフのx軸の値が1,2,3,4・・と1間隔の時だけなので、x軸の値の間隔が違う時はそれに合わせる必要がある

plt.bar(x, height, width=1.0)
密着させた棒グラフ

x軸の値の間隔が1でなければ、width=1.0にしても密着していない

x = np.arange(-6, 6, 2)
height = np.arange(5, 17, 2)

plt.bar(x, height, width=1.0)
棒グラフ

棒グラフを細くしてみるとこんなの

plt.bar(x, height, width=0.1)
細い棒グラフ

棒グラフの枠線

棒グラフは枠線と内部で構成されていて、枠線の色などを変えることもできる

色はedgecolor
線幅はlinewidth
で変更可能

plt.bar(x, height, linewidth=4, edgecolor='y')
枠線をつけた棒グラフ

ラベルに対して右よせ、中央よせ

デフォルトでは棒グラフの中央に横軸ラベルが来るようになっているが、棒グラフの左端にすることもできる

指定にはalignを使う
{'center', 'edge'}が指定可能
デフォルトは'center'

plt.bar(x, height, align='edge')
ラベルを左にした棒グラフ

x軸のラベル

x軸のラベルを数字じゃなく文字列にしてみる

tick_labelに付けたいラベルのリストを与えると、データに対応したところが指定のラベルになってくれる

ticks = ['April', 'May', 'June', 'July', 'August', 'September']

plt.bar(x, height, tick_label=ticks)
ラベルを文字列にした棒グラフ

底の値

bottomを利用することで、棒グラフの下に空白を埋めてくれる
下の例では一様に4を与えているので、4からデータが始まっているように見える

イメージとしては積み上げグラフで、あくまでも空白を下に埋めているだけなので棒グラフのtopは
top = height + bottom
になる

plt.bar(x, height, bottom=4)
bottomを変えた棒グラフ

個別にbottomを設定することも可能

b = np.arange(4, 10)
height = np.arange(15, 4, -2)
plt.bar(x, height, bottom=b)
下に空白を入れた棒グラフ

エラーバー

x軸方向

x軸方向のエラーバーはxerrで表示させることができる

x_error = 0.6
plt.bar(x, height, xerr=x_error)
横エラーバーをつけた棒グラフ

capsizeでエラーバーのキャップの長さを調整することも可能

x_error = 0.6
plt.bar(x, height, xerr=x_error, capsize=7)
キャップありエラーバー

y軸方向

y軸方向のエラーバーはyerrで表示させることができる

y_error = np.arange(3, 9) / 10
plt.bar(x, height, yerr=y_error)
縦エラーバーをつけた棒グラフ

x軸方向の場合と同様にcapsizeでエラーバーのキャップの長さを調整することが可能

y_error = np.arange(3, 9) / 10
plt.bar(x, height, yerr=y_error, capsize=7)
キャップをつけた縦エラーバー

y軸を対数めもり

logTrueにすることで、y軸のめもりが対数めもりになる

x = np.arange(-3, 3)
height = np.asarray([10**i for i in range(6)])
plt.bar(x, height, log=True)
plt.show()
対数メモリの棒グラフ

公式ドキュメントを参考にしました

matplotlib.pyplot.bar — Matplotlib 3.7.1 documentation

コメント