我有一个 Python 直方图。
我想将直方图的峰值标准化为 1,以便只有条形的相对高度很重要。
我看到一些涉及更改 bin 宽度的方法,但我不想这样做。
我也意识到我可以只更改 y 轴的标签,但我还覆盖了另一个图,所以 yticks 必须是实际值。
有没有办法访问和更改每个 bin 中的直方图“计数”?
谢谢你。
我有一个 Python 直方图。
我想将直方图的峰值标准化为 1,以便只有条形的相对高度很重要。
我看到一些涉及更改 bin 宽度的方法,但我不想这样做。
我也意识到我可以只更改 y 轴的标签,但我还覆盖了另一个图,所以 yticks 必须是实际值。
有没有办法访问和更改每个 bin 中的直方图“计数”?
谢谢你。
我认为您所追求的是直方图的标准化形式,其中 y 轴是密度而不是计数。如果您使用的是 Numpy,只需使用histogram 函数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()