棒グラフの基本
縦棒グラフ
棒グラフは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()

棒グラフのカスタマイズ
色
棒グラフの色を変更するには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
を設定することも可能
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軸を対数めもり
log
をTrue
にすることで、y軸のめもりが対数めもりになる
x = np.arange(-3, 3)
height = np.asarray([10**i for i in range(6)])
plt.bar(x, height, log=True)
plt.show()

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