2024-04-25 04:17:33 发布
网友
有没有办法告诉matplotlib“规范化”直方图,使其面积等于指定值(1除外)?
选项“normed=0”
n, bins, patches = plt.hist(x, 50, normed=0, histtype='stepfilled')
回到频率分布。
您可以将weights参数传递给hist,而不是使用normed。例如,如果您的存储箱覆盖间隔[minval, maxval],那么您有n存储箱,并且您希望将区域规范化为A,那么我认为
weights
hist
normed
[minval, maxval]
n
A
weights = np.empty_like(x) weights.fill(A * n / (maxval-minval) / x.size) plt.hist(x, bins=n, range=(minval, maxval), weights=weights)
应该会成功的。
编辑:参数weights的大小必须与x的大小相同,其效果是使x中的每个值向bin计数贡献weights中的相应值,而不是1。
x
不过,我认为hist函数可能需要更强的控制规范化的能力。例如,我认为按现状,在规格化时忽略binned范围之外的值,这通常不是您想要的。
只需计算它并将其规格化为您想要的任何值,然后使用bar绘制直方图。
bar
另一方面,这将规范化所有条的区域为normed_value。原始和将不是是normed_value(尽管如果您愿意的话,很容易做到这一点)。
normed_value
例如
import numpy as np import matplotlib.pyplot as plt x = np.random.random(100) normed_value = 2 hist, bins = np.histogram(x, bins=20, density=True) widths = np.diff(bins) hist *= normed_value plt.bar(bins[:-1], hist, widths) plt.show()
所以,在这种情况下,如果我们要积分(高度和宽度之和),我们得到的是2.0而不是1.0。(即(hist * widths).sum()将产生2.0)
(hist * widths).sum()
2.0
您可以将
weights
参数传递给hist
,而不是使用normed
。例如,如果您的存储箱覆盖间隔[minval, maxval]
,那么您有n
存储箱,并且您希望将区域规范化为A
,那么我认为应该会成功的。
编辑:参数
weights
的大小必须与x
的大小相同,其效果是使x中的每个值向bin计数贡献weights
中的相应值,而不是1。不过,我认为
hist
函数可能需要更强的控制规范化的能力。例如,我认为按现状,在规格化时忽略binned范围之外的值,这通常不是您想要的。只需计算它并将其规格化为您想要的任何值,然后使用
bar
绘制直方图。另一方面,这将规范化所有条的区域为
normed_value
。原始和将不是是normed_value
(尽管如果您愿意的话,很容易做到这一点)。例如
所以,在这种情况下,如果我们要积分(高度和宽度之和),我们得到的是2.0而不是1.0。(即
(hist * widths).sum()
将产生2.0
)相关问题 更多 >
编程相关推荐