基本形
pyplot.bar()に2つの引数を与えるのが基本形。
- 第1引数は横軸のリスト
- 第2引数は横軸リストの要素に対応した値
1 2 3 4 |
x = [1, 2, 3] value = [3, 2, 4] plt.bar(x, value) plt.show() |
bar(x, y)
の横軸xの要素はfloatでなければならないが、これを文字表記に変更する。
1 2 3 4 5 6 7 |
import matplotlib.pyplot as plt x = [1, 2, 3] value = [3, 2, 4] plt.bar(x, value) plt.xticks(x, ["First", "Second", "Third"]) plt.show() |
ただし項目名が左寄せになっているので、これらをセンタリングする。
なおxticksを指定せず数値のままでセンタリングすると、xで与えた数値が中央に来るよう調整される。
1 2 3 4 5 6 7 |
import matplotlib.pyplot as plt x = [1, 2, 3] value = [3, 2, 4] plt.bar(x, value, align="center") plt.xticks(x, ["First", "Second", "Third"]) plt.show() |
棒の位置や幅のコントロール
デフォルトでは棒の位置はxで与えた数値に左寄せされる。またwidth=で棒の幅を指定することができる。
以下のように指定することで、ヒストグラムのような図を描くこともできる。
1 2 3 4 5 6 7 |
import numpy as npy import matplotlib.pyplot as plt value = [1, 2, 4, 6, 4, 3, 1] x = range(len(value)) plt.bar(x, value, width = 1) plt.show() |
hist()関数の戻り値を使って、以下のように書けるが、時にグラフの両側に空きができてしまうので、さらに検討が必要。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import numpy as npy import numpy.random as rnd import matplotlib.pyplot as plt data = rnd.rand(1000) + 0.5 x_min = 0.5 x_max = 1.5 bin_number = 10 bin_width = (x_max - x_min) / bin_number bin_count, bin_position, patches = plt.hist(data, range=(x_min, x_max), bins=bin_number) bin_position = npy.delete(bin_position, len(bin_position) - 1) plt.bar(bin_position, bin_count, width=bin_width) plt.show() |
ヒストグラム
pyplotで簡単にヒストグラムが描ける。デフォルトでは縦軸は度数。
1 2 3 4 5 6 |
import numpy.random as rnd import matplotlib.pyplot as plt data = rnd.randint(0, 10, 1000) plt.hist(data, range=(0, 10)) plt.show() |
縦軸を頻度にしたい場合は、normed=TRUE
オプションをつける。
1 2 3 4 5 6 |
import numpy.random as rnd import matplotlib.pyplot as plt data = rnd.randint(0, 10, 1000) plt.hist(data, normed=True, range=(0, 10)) plt.show() |
縦軸が小数になっていて、各階級の頻度が1/10bins→0.1程度になっていることに注意。
頻度分布について
上の例ではうまく頻度分布が表示されているが、以下のようにうまくいかない場合がある。
1 2 3 4 5 6 7 |
import numpy as npy import numpy.random as rnd import matplotlib.pyplot as plt data = rnd.rand(100) plt.hist(data, normed=True) plt.show() |
ヒストグラムとplotの重ね合わせ
ヒストグラムのrankの範囲とplotのx軸の範囲を同じにすれば、こちらの例のように重ねて描くことができる。
ヒストグラムの戻り値
hist()
は3つの戻り値を返す。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import numpy as npy import numpy.random as rnd import matplotlib.pyplot as plt data = rnd.rand(10) bin_count, bin_position, patches = plt.hist(data, range=(0, 1)) print(bin_count) print(bin_position) print(patches) # [ 2. 1. 2. 1. 1. 1. 1. 0. 1. 0.] # [ 0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ] # <a list of 10 Patch objects> |
- bin_count
- 各ビンの度数。
- bin_position
- ビン数とrangeに応じたビンの位置。
- patches
- 各ビンのオブジェクトの配列。ビンごとに色を変えるなどの操作ができる。