1

等ログ間隔のビン内の配列「d」をカウントするこのヒストグラムがあります。

 max_val=np.log10(max(d))
 min_val=np.log10(min(d))
 logspace = np.logspace(min_val, max_val, 50) 


 hist(d,bins=logspace,label='z='+str(redshift),histtype='step')
 show()

問題は、面積が1になるように正規化することです。Normed = Trueオプションを使用しても結果が得られませんでした。これは、対数ビンを使用していることが原因である可能性があります。したがって、次のようにヒストグラムを正規化してみました。

 H=hist(d,bins=logspace,label='z='+str(redshift),histtype='step')
 H_norm=H[0]/my_norm_constant

しかし、H_normとビンをプロットする方法がわかりません

4

2 に答える 2

2

normed = Trueを試しましたが、面積は1です。

from pylab import *
d = np.random.normal(loc=20, size=10000)
max_val=np.log10(max(d))
min_val=np.log10(min(d))
logspace = np.logspace(min_val, max_val, 50) 


r = hist(d,bins=logspace,histtype='step', normed=True)
print "area":, sum(np.diff(r[1])*r[0])

コードを実行して、出力を確認できますか。1でない場合は、numpyのバージョンを確認してください。コードを実行すると、次の警告メッセージが表示されます。

C:\ Python26 \ lib \ site-packages \ matplotlib \ axes.py:7680:UserWarning:このリリースでは、バージョン1.5より前のNumPyヒストグラム関数の正規化のバグが修正され、ビンの幅が不均一になります。返され、プロットされた値は、密度:n /(N *ビン幅)になります。ここで、nはビン数、Nはポイントの総数です。

グラフを自分でプロットするには:

step(r[1][1:], r[0]/my_norm_constant)
于 2011-08-08T13:00:44.690 に答える
1

これは、ビンの幅に関係なく、ビンの高さを合計して1になる一般的な正規化を使用します。

import matplotlib
import numpy as np

x = [0.1,0.2,0.04,0.05,0.05,0.06,0.07,0.11,0.12,0.12,0.1414,\
     0.1415,0.15,0.12,0.123,0,0.14,0.145,0.15,0.156,0.12,0.15,\
     0.156,0.166,0.151,0.124, 0.12,0.124,0.12,0.045,0.124]

weights = np.ones_like(x)/float(len(x))
p=plt.hist(x,
    bins=4,
    normed=False, 
    weights=weights,
    #histtype='stepfilled',
    color=[0.1,0.4,0.3]
)

plt.ylim(0,1)
plt.show()

結果のヒストグラムプロット:

于 2016-07-20T16:37:07.057 に答える