更改Python直方图箱中的计数

4
我有一个Python直方图。
我想将直方图的峰值归一化为1,以便只有条形图的相对高度很重要。
我看到一些方法可以通过改变箱宽来实现这一点,但我不想这样做。
我也意识到我可以只更改y轴标签,但我还有另一个叠加的图,所以yticks必须是实际值。
没有办法访问和更改每个箱中的直方图“计数”吗?
谢谢。
1个回答

5
我认为您需要的是标准化的直方图,其中y轴是密度而不是计数。如果您使用Numpy,则可以在histogram function中使用normed标志。
如果您希望您的直方图峰值为1,则可以通过将每个bin中的计数除以最大bin值来实现,即(在SO MatPlotLib示例这里的基础上)。
#!/usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np

# Generate random data
mu, sigma = 200, 25
x = mu + sigma*np.random.randn(10000)

# Create the histogram and normalize the counts to 1
hist, bins = np.histogram(x, bins = 50)
max_val = max(hist)
hist = [ float(n)/max_val for n in hist]

# Plot the resulting histogram
center = (bins[:-1]+bins[1:])/2
width = 0.7*(bins[1]-bins[0])
plt.bar(center, hist, align = 'center', width = width)
plt.show()

enter image description here


但是这不是将面积归一化为1而不是峰值吗? - user1551817
1
是的,非常正确。但它应该让你轻松比较条形图的相对高度。如果您确实希望峰值为1,则只需将每个箱子除以最大箱子的值即可。 - mdml
1
我修改了我的答案,展示如何通过最大箱值来划分箱。 - mdml
谢谢。你的第一行是max_val = max(bins),但“bins”还没有被定义? - user1551817
1
我修改了示例以包括生成直方图。 - mdml
显示剩余4条评论

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