*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))
import matplotlib.pyplot as plt
# Let X be the array whose histogram needs to be plotted.
nx, xbins, ptchs = plt.hist(X, bins=20)
plt.clf() # Get rid of this histogram since not the one we want.
nx_frac = nx/float(len(nx)) # Each bin divided by total number of objects.
width = xbins[1] - xbins[0] # Width of each bin.
x = np.ravel(zip(xbins[:-1], xbins[:-1]+width))
y = np.ravel(zip(nx_frac,nx_frac))
plt.plot(x,y,linestyle="dashed",label="MyLabel")
#... Further formatting.
6条答案
按热度按时间wqlqzqxt1#
如果希望所有条的总和等于1,请按值的总数对每个条柱进行加权:
希望这能有所帮助,虽然线程是相当古老的...
Python 2.x的注意事项:将转换添加到
float()
,作为除法运算符之一,否则,由于整数除法,您将以零结束9gm1akwq2#
如果你提出一个更完整的工作(或者在本例中是非工作)示例,这会更有帮助。
我尝试了以下方法:
这实际上将生成一个y轴从
[0,1]
开始的条形图直方图。此外,根据
hist
文档(即ipython
的ax.hist?
),我认为总和也很好:在执行上述命令后尝试执行此操作:
我得到了预期的返回值
1.0
。请记住,normed=True
并不意味着每个棒线上的值之和都是1,而是对棒线的积分是1。在我的例子np.sum(n)
中,返回了大约7.2767
。cbeh67ev3#
我知道这个答案太晚了,因为问题的日期是2010年,但我遇到了这个问题,因为我自己也面临着类似的问题。如答案中所述,normed=True意味着直方图下的总面积等于1,但高度之和不等于1。然而,为了方便直方图的物理解释,我想,使其高度和等于1。
我在下面的问题中找到了一个提示-Python: Histogram with area normalized to something other than 1
但是我无法找到一种方法来使条形图模仿histtype=“step”特性hist()。Matplotlib - Stepped histogram with already binned data
如果社区认为它可以接受,我想提出一个解决方案,综合上述两个职位的想法。
这对我来说非常有效,虽然在某些情况下,我注意到直方图的最左边的“条”或最右边的“条”并没有因为触及Y轴的最低点而关闭。在这种情况下,在y轴的起点或末端添加一个元素0就达到了必要的结果。
我只是想分享一下我的经验。谢谢。
disbfnqx4#
这里是另一个使用
np.histogram()
方法的简单解决方案。实际上,您可以使用以下公式检查总和是否等于1:
kpbwa7wx5#
seaborn.histplot
,或将seaborn.displot
与kind='hist'
结合使用,并指定stat='probability'
*概率:或比例:标准化以使条高度和为1
*密度:归一化,使得直方图的总面积等于1
data
:pandas.DataFrame
、numpy.ndarray
、Map或序列seaborn
是matplotlib
的高级API*在
python 3.8.12
、matplotlib 3.4.3
、seaborn 0.11.2
中进行测试导入和数据
sns.histplot
sns.displot
6mw9ycah6#
从matplotlib 3.0.2开始,
normed=True
就被弃用了。为了得到想要的输出,我必须做以下事情:尝试将
weights
和density
同时指定为plt.hist()
的参数对我来说不起作用。如果有人知道一种方法来让它在没有访问normed关键字参数的情况下工作,请在评论中告诉我,我会删除/修改这个答案。如果你想要面元中心,那么不要使用
bins[:-1]
,这是面元边缘--你需要选择一个合适的方案来计算中心(可能是也可能不是很容易推导出来的)。