如何在matplotlib中绘制其条高之和为1的直方图?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (62)

我想用matplotlib从向量中绘制标准化直方图。我尝试了以下几点:

plt.hist(myarray, normed=True)

以及:

plt.hist(myarray, normed=1)

但是,这两个选项都不产生y轴。0,1这样,柱状图的柱状图高度之和为1。我想制作这样的直方图--我该怎么做?

提问于
用户回答回答于

import numpy as np
import matplotlib.pyplot as plt

x = np.random.randn(1000)

fig = plt.figure()
ax = fig.add_subplot(111)
n, bins, rectangles = ax.hist(x, 50, normed=True)
fig.canvas.draw()
plt.show()

或者:

*normed*:
If *True*, the first element of the return tuple will
be the counts normalized to form a probability density, i.e.,
``n/(len(x)*dbin)``.  In a probability density, the integral of
the histogram should be 1; you can verify that with a
trapezoidal integration of the probability density function::

    pdf, bins, patches = ax.hist(...)
    print np.sum(pdf * np.diff(bins))

在上面的命令之后尝试一下:

np.sum(n * np.diff(bins))

我得到的返回值为1.0如预期的那样。

用户回答回答于

weights = np.ones_like(myarray)/float(len(myarray))
plt.hist(myarray, weights=weights)

扫码关注云+社区