ガウス曲線をヒストグラムに合わせるために、以下のコードを記述しました。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]
コメントを追加