规范化多数据直方图

时间:2014-08-11 21:09:39

标签: python numpy matplotlib histogram normalize

我有几个数组,我正在绘制直方图,如下:

import numpy as np
import matplotlib.pyplot as plt

x = np.random.normal(0,.5,1000)
y = np.random.normal(0,.5,100000)

plt.hist((x,y),normed=True)

然而,当然,这会使两个阵列单独归一化,因此它们都具有相同的峰值。我希望将它们标准化为元素总数,以便y的直方图明显高于x的直方图。有没有方便的方法在matplotlib中执行此操作,还是我必须在numpy中乱七八糟?我还没有发现任何相关信息。

另一种说法是,如果我改为制作两个数组的累积图,那么它们不应该在1处加满,而应该加到1。

1 个答案:

答案 0 :(得分:1)

是的,您可以使用numpy计算直方图并将其重新正规化。

x = np.random.normal(0,.5,1000)
y = np.random.normal(0,.5,100000)

xhist, xbins = np.histogram(x, normed=True)
yhist, ybins = np.histogram(x, normed=True)

现在,您应用正则化。例如,如果您希望将x规范化为1且与y成比例:

yhist *= len(y) / len(x)

现在,绘制直方图:

def plot_histogram(data, edge_bins, **kwargs):
    bins = edge_bins[:-1] + edge_bins[1:]
    plt.step(bins, data, **kwargs)

plot_histogram(xhist, xbins, c='b')
plot_histogram(yhist, ybins, c='g')

enter image description here