1

5 つのポイント (x、y) があり、matplotlib の histogram2d 関数を使用して、各ビンの密度を示すさまざまな色を示すヒートマップを作成しました。ビン内のポイント数の頻度を取得するにはどうすればよいですか?

    import numpy as np
    import numpy.random
    import pylab as pl
    import matplotlib.pyplot as plt

    x = [.3, -.3, -.3, .3, .3]
    y = [.3, .3, -.3, -.3, -.4]

    heatmap, xedges, yedges = np.histogram2d(x, y, bins=4)
    extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]

    plt.clf()
    plt.imshow(heatmap, extent=extent)
    plt.show()

    pl.scatter(x,y)
    pl.show()

したがって、4 つのビンを使用すると、各ビンの頻度は .2、.2、.2、および .4 になると予想されます。

4

2 に答える 2

1

4x4 = 16 ビンを使用しています。合計 4 つのビンが必要な場合は、2x2 を使用します。

In [45]: np.histogram2d(x, y, bins=2)
Out[45]: 
(array([[ 1.,  1.],
       [ 2.,  1.]]),
 array([-0.3,  0. ,  0.3]),
 array([-0.4 , -0.05,  0.3 ]))

タプルを使用して、出力の完全な形状を指定できます。bins=(2,2)

出力を正規化する場合は、次を使用しますnormed=True

In [50]: np.histogram2d(x, y, bins=2, normed=True)
Out[50]: 
(array([[ 1.9047619 ,  1.9047619 ],
       [ 3.80952381,  1.9047619 ]]),
 array([-0.3,  0. ,  0.3]),
 array([-0.4 , -0.05,  0.3 ]))
于 2014-03-07T21:26:53.910 に答える
1
heatmap, xedges, yedges = np.histogram2d(x, y, bins=4)
heatmap /= heatmap.sum()

In [57]: heatmap, xedges, yedges = np.histogram2d(x, y, bins=4)

In [58]: heatmap
Out[58]: 
array([[ 1.,  0.,  0.,  1.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 2.,  0.,  0.,  1.]])

In [59]: heatmap /= heatmap.sum()

In [60]: heatmap
Out[60]: 
array([[ 0.2,  0. ,  0. ,  0.2],
       [ 0. ,  0. ,  0. ,  0. ],
       [ 0. ,  0. ,  0. ,  0. ],
       [ 0.4,  0. ,  0. ,  0.2]])

normed=Trueを使用する場合heatmap.sum()、一般的には 1 に等しくならないことに注意してください。むしろ、heatmapビンの面積を掛けると 1 になります。これheatmapで分布が作成されますが、要求した度数と正確には一致しません。

于 2014-03-07T21:30:08.240 に答える