まずはこちらをクリック!

pythonでヒストグラムを描画する

サバくん
サバくん

1次元データの分布を素早く把握できるヒストグラム

pythonを使ってヒストグラムを記述する方法を記述します。

前準備

まずはヒストグラムを描画するためにモジュールのインポートとサンプルデータを作成しましょう。

# import modules
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# sample data
val = np.random.randn(100)*10+50 #分散10, 平均値50
print(f"mean:{np.mean(l)}, std:{np.std(l)}")

ではこのサンプルデータを使ってヒストグラムを描画してみましょう!

matplotlibを使った方法

これが一番簡単な方法です。早速コードを書いてみましょう。

fig = plt.figure(figsize=(16,8))
plt.hist(val)
plt.show()

階級幅を変える場合はbins=整数を引数に追加します。(その他色々な引数も追加しておきます)

fig = plt.figure(figsize=(16,8))
plt.hist(val,
         bins=20, # 階級幅の変更
         alpha=.5, # 半透明にします
         color="orange") # ついでに色も変更
plt.show()

相対度数を表出したい場合はdensity=Trueを引数に追加します。

fig = plt.figure(figsize=(16,8))
plt.hist(val,
         density=True,
         edgecolor="black", # 枠の色を変更
         linewidth=2) # 枠の幅を変更
plt.show()

累積度数を表出したい場合はcumulative=Trueを引数に追加します。

fig = plt.figure(figsize=(16,8))
plt.hist(val,
         cumulative=True,
         hatch="/", # 棒グラフの柄を変更
         rwidth=.8) # 棒グラフの幅を変更
plt.show()

階級ごとに数を求める方法

階級の幅を自分で定めたい場合は自分で階級ごとの度数を求める方法もあります。

ウィジットで階級幅を変更できるヒストグラムを描画するコードを以下に記述します。

from ipywidgets import interact

def plotHistgram(w =10):
    r = range(0,100+1,w)
    arr = [sum(np.array(val)<i) for i in r]
    x = np.convolve(r,np.ones(2)/2)[1:-1]
    
    fig = plt.figure(figsize=(16,8))
    plt.bar(x,np.diff(arr),w,alpha=.5)
    plt.xlim(0, 100)
    plt.show()
interact(plotHistgram, w=(1,20,1))

この記事でも書いたように区切る階級を変化させるとグラフから得られる印象が変わることがわかると思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA