我有一个关于与matplotlib的HIST()函数的问题。
我写代码绘制数据的直方图谁的值从0到1。例如:
values = [0.21, 0.51, 0.41, 0.21, 0.81, 0.99]
bins = np.arange(0, 1.1, 0.1)
a, b, c = plt.hist(values, bins=bins, normed=0)
plt.show()
上面的代码生成一个正确的直方图(我不能张贴图片,因为我没有足够的声誉)。 在频率方面,它看起来像:
[0 0 2 0 1 1 0 0 1 1]
我想这个输出转换为离散的概率密度函数,即对于上面的例子,我想获得以下频率值:
[ 0. 0. 0.333333333 0. 0.166666667 0.166666667 0. 0. 0.166666667 0.166666667 ] # each item in the previous array divided by 6)
我想我只需要在HIST()函数来改变参数以“范= 1”。 不过,我得到下面的柱状图频率:
[ 0. 0. 3.33333333 0. 1.66666667 1.66666667 0. 0. 1.66666667 1.66666667 ]
这不是我所期望,我不知道如何让离散概率密度函数谁的总和应为1.0。 类似的问题被要求在以下链接( 链接问题 ),但我不认为这个问题得到了解决。
我很欣赏为您的帮助提前。
原因是norm=True
给人的概率密度函数 。 在概率理论中,概率密度函数或连续随机变量的密度,描述了一种用于该随机变量取给定值的相对似然性。
让我们考虑一个非常简单的例子。
x=np.arange(0.1,1.1,0.1)
array([ 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
# Bin size
bins = np.arange(0.05, 1.15, 0.1)
np.histogram(x,bins=bins,normed=1)[0]
[ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]
np.histogram(x,bins=bins,normed=0)[0]/float(len(x))
[ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
# Change the bin size
bins = np.arange(0.05, 1.15, 0.2)
np.histogram(x,bins=bins,normed=1)[0]
[ 1., 1., 1., 1., 1.]
np.histogram(x,bins=bins,normed=0)[0]/float(len(x))
[ 0.2, 0.2, 0.2, 0.2, 0.2]
如,可以在上面看到的,概率是x将位于之间[0.05-0.15]
或[0.15-0.25]
是1/10
,如果你改变块大小,以而0.2
则概率,它会位于之间[0.05-0.25]
或[0.25-0.45]
是1/5
。 现在,这些实际的概率值依赖于块大小,但是,概率密度是独立于垃圾箱的大小。 因此,这是上面做的唯一正确的方法,否则一个需要说明的Bin宽度在每个情节。
所以你的情况,如果你真的想绘制在每个容器(而不是概率密度)的概率值,那么你可以简单地通过总的元素个数将每个直方图的频率。 不过,我建议你不要这样做,除非你是离散变量工作,每个箱代表这个变量的一个可能值。
从绘制的直方图的连续概率函数(PDF) - 在Python解决。 请参阅本博客详细解释。 ( http://howdoudoittheeasiestway.blogspot.com/2017/09/plotting-continuous-probability.html )否则,您可以使用下面的代码。
n, bins, patches = plt.hist(A, 40, histtype='bar')
plt.show()
n = n/len(A)
n = np.append(n, 0)
mu = np.mean(n)
sigma = np.std(n)
plt.bar(bins,n, width=(bins[len(bins)-1]-bins[0])/40)
y1= (1/(sigma*np.sqrt(2*np.pi))*np.exp(-(bins - mu)**2 /(2*sigma**2)))*0.03
plt.plot(bins, y1, 'r--', linewidth=2)
plt.show()
文章来源: Matplotlib: How to convert a histogram to a discrete probability mass function?