matplotlib
前回、PythonのNumPyで多項式のカーブフィッティングをする関数「polyfit」を紹介しました。
今回はmatplotlibでヒストグラムを表示する「hist関数」を紹介します。
それでは始めていきましょう。
ヒストグラムの表示
まずはとりあえずヒストグラムを表示してみます。
ヒストグラムを表示する場合、一つの数値のリストが必要です。
今回は「random.gauss()」を使って正規分布(ガウス分布)に従うランダムな値を大量に取得して、そのヒストグラムを描いてみます。
ちなみに正規分布に従うランダムな値を取得する方法はこちらの記事で紹介していますので、よかったらどうぞ。
matplotlibでヒストグラムを表示するには「matplotlib.pyplot」をインポートして、「plt.hist(値のリスト)」とします。
import matplotlib.pyplot as plt
import random
y = [random.gauss(1, 5) for _ in range(10000)]
fig = plt.figure()
plt.clf()
plt.hist(y)
plt.show()
実行結果
ビン数の設定
ヒストグラムのビン数、つまり棒グラフの数を変更するには「bins=ビン数」のオプションを追加します。
ちなみに初期値は「10」です。
import matplotlib.pyplot as plt
import random
y = [random.gauss(1, 5) for _ in range(10000)]
fig = plt.figure()
plt.clf()
plt.hist(y, bins=100)
plt.show()
実行結果
また数値として設定せず手法を設定することもできます。
一番簡単なのは「bins=”auto”」として自動で最適なビン数を設定することです。
import matplotlib.pyplot as plt
import random
y = [random.gauss(1, 5) for _ in range(10000)]
fig = plt.figure()
plt.clf()
plt.hist(y, bins="auto")
plt.show()
実行結果
表示範囲の設定
表示範囲を設定するには「range=[最小値, 最大値]」を追加します。
import matplotlib.pyplot as plt
import random
y = [random.gauss(1, 5) for _ in range(10000)]
fig = plt.figure()
plt.clf()
plt.hist(y, bins=100, range=[-5, 5])
plt.show()
実行結果
もちろん「plt.xlim(最小値, 最大値)」でも表示範囲を設定できますが、その場合はグラフの淵までグラフがある状態になり、少し見辛くなります。
import matplotlib.pyplot as plt
import random
y = [random.gauss(1, 5) for _ in range(10000)]
fig = plt.figure()
plt.clf()
plt.hist(y, bins=100)
plt.xlim(-5, 5)
plt.show()
実行結果
好みによるとは思いますが、ヒストグラムの場合は「ranga=[最小値, 最大値]」のオプションを使う方が見やすいと思います。
相対値グラフの表示
グラフ分布をその階級に含まれる個数ではなく、相対値として表示する場合は「density=True」を追加します。
import matplotlib.pyplot as plt
import random
y = [random.gauss(1, 5) for _ in range(10000)]
fig = plt.figure()
plt.clf()
plt.hist(y, bins=100, density=True)
plt.show()
実行結果
累積値グラフの表示
グラフを分布ではなく、累積値として表示する場合は「cumulative=True」を追加します。
import matplotlib.pyplot as plt
import random
y = [random.gauss(1, 5) for _ in range(10000)]
fig = plt.figure()
plt.clf()
plt.hist(y, bins=100, cumulative=True)
plt.show()
実行結果
先ほどの相対値と合わせて、累積グラフを相対値として表示することも可能です。
import matplotlib.pyplot as plt
import random
y = [random.gauss(1, 5) for _ in range(10000)]
fig = plt.figure()
plt.clf()
plt.hist(y, bins=100, density=True, cumulative=True)
plt.show()
実行結果
表示方法の設定
「hist関数」には4つの表示方法(bar、step、stepfilled, barstacked)があります。
これらを「histtype=”表示方法”」として追加します。
barstackedは複数のヒストグラムを表示する際に用いるので今回は割愛します。
またこれらの表示の違いを見るにはそれぞれの階級の棒グラフの線がないと分からないので「edgecolor=”black”」を追加しています。
import matplotlib.pyplot as plt
import random
y = [random.gauss(1, 5) for _ in range(10000)]
fig = plt.figure()
plt.clf()
plt.hist(y, bins=100, histtype="bar", edgecolor="black")
plt.show()
実行結果
「histtype=”bar”」ではそれぞれが一つの棒グラフとなっています。
import matplotlib.pyplot as plt
import random
y = [random.gauss(1, 5) for _ in range(10000)]
fig = plt.figure()
plt.clf()
plt.hist(y, bins=100, histtype="step", edgecolor="black")
plt.show()
実行結果
「histtype=”step”」では外側をなぞった様な表示になっています。
import matplotlib.pyplot as plt
import random
y = [random.gauss(1, 5) for _ in range(10000)]
fig = plt.figure()
plt.clf()
plt.hist(y, bins=100, histtype="stepfilled", edgecolor="black")
plt.show()
実行結果
「histtype=”stepfilled”」では「histtype=”step”」の枠線に、さらにその内側を塗りつぶした表示になっています。
表示方向の設定
「hist関数」を使ってヒストグラムを表示するとデフォルトでは縦向きの棒グラフ表示ですが、「orientation=”horizontal”」とすることで横向きの棒グラフ表示にすることができます。
import matplotlib.pyplot as plt
import random
y = [random.gauss(1, 5) for _ in range(10000)]
fig = plt.figure()
plt.clf()
plt.hist(y, bins=100, orientation="horizontal")
plt.show()
実行結果
次回は今回matplotlibで複数のヒストグラムを表示する方法を紹介します。
ではでは今回はこんな感じで。
コメント