归一化多数据直方图

3

我有几个数组,想要绘制它们的直方图,像这样:

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个回答

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


谢谢!然而,“扩大y”的步骤是否应该像 y *= len(y)/(len(x)+len(y)) 这样呢?看起来你想要y在整个数据集中的比例。 - Alex
@user3692905 是的,请应用您认为合适的规范化方法。在我的情况下,我将x规范化为1,y与之成比例。 - Davidmh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接