MatPlotLibとNumpyを使用してガウス分布をヒストグラムに適合させる-Yスケーリングが間違っていますか?

混乱している

ガウス曲線をヒストグラムに合わせるために、以下のコードを記述しました。Yスケーリングは異なりますが、機能しているようです。私は何が間違っているのですか?

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.mlab as mlab

list = [0,1,1,2,2,2,3,3,4]

plt.figure(1)
plt.hist(list)
plt.xlim((min(list), max(list)))

mean = np.mean(list)
variance = np.var(list)
sigma = np.sqrt(variance)
x = np.linspace(min(list), max(list),100)
plt.plot(x,mlab.normpdf(x,mean,sigma))

plt.show()

ありがとう!

デビッドツウィッカー

プロットする分布も正規化されるため、ヒストグラムを正規化する必要があります。

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.mlab as mlab

arr = np.random.randn(100)

plt.figure(1)
plt.hist(arr, normed=True)
plt.xlim((min(arr), max(arr)))

mean = np.mean(arr)
variance = np.var(arr)
sigma = np.sqrt(variance)
x = np.linspace(min(arr), max(arr), 100)
plt.plot(x, mlab.normpdf(x, mean, sigma))

plt.show()

normed=Trueの呼び出しに注意してくださいplt.histデータポイントが少なすぎるとヒストグラムが奇妙に見えるため、サンプルデータを変更したことにも注意してください。

代わりに、元のヒストグラムを保持して分布を調整する場合は、分布の積分がヒストグラムの積分と等しくなるように分布をスケーリングする必要があります。つまり、リスト内のアイテムの数にバーの幅を掛けたものです。 。これは次のように達成できます

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.mlab as mlab

arr = np.random.randn(1000)

plt.figure(1)
result = plt.hist(arr)
plt.xlim((min(arr), max(arr)))

mean = np.mean(arr)
variance = np.var(arr)
sigma = np.sqrt(variance)
x = np.linspace(min(arr), max(arr), 100)
dx = result[1][1] - result[1][0]
scale = len(arr)*dx
plt.plot(x, mlab.normpdf(x, mean, sigma)*scale)

plt.show()

scaleアイテムの数に単一のバーの幅を掛けて計算され係数に注意してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ