2

0kmから10kmまでの雲の高さを示す250の値があるとします。これらの値は3つのカテゴリに分類されます。カテゴリ1には40個の値が含まれ、カテゴリ2には120個の値が含まれ、カテゴリ3には90個の値が含まれます。したがって、ビン= [0,1,2,3,4,5,6,7,8,9,10]の3つのヒストグラムをプロットします。ここで、y軸は値の頻度を示します。つまり、ビン "3 "カテゴリ1には10個の値があります。そして、これが私の問題です。y軸に頻度を表示したくないのですが、合計値数250による確率です。確率がここで正しい単語であることを願っています...実際にはヒストグラムは必要ありません。カテゴリ1ではビン「3」に10個の値があることを示し、10/250があることを示したいので、ビン「3」にすべての値の4%があります。

あなたが私の問題を理解し、あなたが私を助けてくれることを願っています。コードの一部を表示できません。コードがないためです...とにかく助けていただければ幸いです。ありがとう!

4

1 に答える 1

3

Numpyのヒストグラム関数を使用し、ヒストグラムを3つのカテゴリすべての総人口で割って、データを自分で正規化します。結果はmatplotlib.bar()でプロットできます。

ヒストグラムを直接プロットする方法はないと思います。normed = Trueをmatplotlibsヒストグラム関数に渡すと、重みは1に等しくなるように正規化されるため、ヒストグラム全体の「相対的な重み」を渡すために使用することはできません。

from matplotlib.ticker import FuncFormatter

def myfunc(x, pos=0):
    return '%1.1f%%' % (x*100)

cat1 = np.random.randint(0,11,40)
cat2 = np.random.randint(0,11,120)
cat3 = np.random.randint(0,11,90)

totalpop = float(cat1.size + cat2.size + cat3.size)


fig, axs = plt.subplots(3,1,figsize=(10,9))
fig.subplots_adjust(hspace=.3)

for n, cat in enumerate([cat1,cat2,cat3]):

    hist, bins = np.histogram(cat, bins=11, range=(0,11))
    axs[n].bar(bins[:-1], hist/ totalpop, align='center', facecolor='grey', alpha=0.5)
    axs[n].set_title('Category %i' % n)

    print 'Category %i:' % n, 'size: %i' % cat.size, 'relative size: %1.2f' % (cat.size / float(totalpop))


for ax in axs:
    ax.set_xticks(range(11))
    ax.set_xlim(-1,11)
    ax.yaxis.set_major_formatter(FuncFormatter(myfunc))

ここに画像の説明を入力してください

于 2013-02-12T10:38:06.280 に答える