我有几个数组,我正在绘制直方图,如下:
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。
答案 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')