python中的非等宽分块直方图

python中的非等宽分块直方图,python,matplotlib,histogram,probability,bins,Python,Matplotlib,Histogram,Probability,Bins,我有一个存储有概率值的数组。有些值为0。我需要绘制一个直方图,这样每个箱子中的元素数量相等。我尝试使用matplotlibs hist函数,但这可以让我决定箱子的数量。我如何进行绘图?(正常绘图和历史工作,但这不是所需的) 我有一万份参赛作品。只有200个值大于0且介于0.0005和0.2之间。此分布不是均匀的,因为只有一个元素具有0.2,而2000近似值为0.0005。因此,绘制它是一个问题,因为箱子的宽度必须不相等,元素数量必须相等。这项任务对我来说没有多大意义,但下面的代码确实如此,我理解

我有一个存储有概率值的数组。有些值为0。我需要绘制一个直方图,这样每个箱子中的元素数量相等。我尝试使用matplotlibs hist函数,但这可以让我决定箱子的数量。我如何进行绘图?(正常绘图和历史工作,但这不是所需的)


我有一万份参赛作品。只有200个值大于0且介于0.0005和0.2之间。此分布不是均匀的,因为只有一个元素具有0.2,而2000近似值为0.0005。因此,绘制它是一个问题,因为箱子的宽度必须不相等,元素数量必须相等。

这项任务对我来说没有多大意义,但下面的代码确实如此,我理解为应该做的事情

我还认为代码的最后几行是您真正想要做的。使用不同的箱子宽度来提高可视化效果(但不要针对每个箱子内等量样本的分布)!我用()

代码
#Python 3->小心//操作符!
将numpy作为np导入
将matplotlib.pyplot作为plt导入
从astroML导入打印为amlp
N_值=1000
N_BINS=100
#创建假数据
prob_数组=np.random.randn(N_值)
prob_数组/=np.max(np.abs(prob_数组),axis=0)#缩放一点
#排序数组
prob\u数组=np.sort(prob\u数组)
#计算垃圾箱边界,
bin_borders=[np.amin(prob_数组)]+[prob_数组[(N_值//N_bin)*i]用于范围(1,N_bin)中的i]+[np.amax(prob_数组)]
打印('SAMPLES:',prob_数组)
打印('BIN-BORDERS:',BIN_BORDERS)
#绘图历史
计数,x,y=plt.hist(概率数组,单元=单元边界)
plt.xlim(边界[0],边界[-1]+1e-2)
打印('计数:',计数)
plt.show()
#这就是,我想的,你真正想要的
图(ax1,ax2)=plt.子批次(2)
left_blob=np.random.randn(N_值/10)+3
右\u blob=np.random.randn(N\u值)+110
两者=np.hstack((左_blob,右_blob))#数据很难以相等的仓位宽度可视化
ax1.hist(两个)
amlp.hist(两个,bin='blocks',ax=ax2)
plt.show()
输出

这项任务对我来说没有多大意义,但下面的代码就是我理解为要做的事情

我还认为代码的最后几行是您真正想要做的。使用不同的箱子宽度来提高可视化效果(但不要针对每个箱子内等量样本的分布)!我用()

代码
#Python 3->小心//操作符!
将numpy作为np导入
将matplotlib.pyplot作为plt导入
从astroML导入打印为amlp
N_值=1000
N_BINS=100
#创建假数据
prob_数组=np.random.randn(N_值)
prob_数组/=np.max(np.abs(prob_数组),axis=0)#缩放一点
#排序数组
prob\u数组=np.sort(prob\u数组)
#计算垃圾箱边界,
bin_borders=[np.amin(prob_数组)]+[prob_数组[(N_值//N_bin)*i]用于范围(1,N_bin)中的i]+[np.amax(prob_数组)]
打印('SAMPLES:',prob_数组)
打印('BIN-BORDERS:',BIN_BORDERS)
#绘图历史
计数,x,y=plt.hist(概率数组,单元=单元边界)
plt.xlim(边界[0],边界[-1]+1e-2)
打印('计数:',计数)
plt.show()
#这就是,我想的,你真正想要的
图(ax1,ax2)=plt.子批次(2)
left_blob=np.random.randn(N_值/10)+3
右\u blob=np.random.randn(N\u值)+110
两者=np.hstack((左_blob,右_blob))#数据很难以相等的仓位宽度可视化
ax1.hist(两个)
amlp.hist(两个,bin='blocks',ax=ax2)
plt.show()
输出

以澄清问题。我有一万份参赛作品。只有200个值大于0且介于0.0005和0.2之间。此分布不是均匀的,因为只有一个元素具有0.2,而2000近似值为0.0005。因此,绘制它是一个问题,因为箱子的宽度和元素数量必须相等。上面绘制的箱子的宽度和元素数量相等,但我怀疑这是否有用。你的问题措辞很糟糕。我现在假设,你想要一个经典的柱状图(没有每个箱子中相同数量的元素的限制;但是不相等的箱子可以提高可视化质量。如果是这样的话,你应该这么说……由于措辞不当,做不必要的工作有点令人难过,但是……看看第二种方法,使用astroml(这也是在astropy中实现的)。很抱歉这样的措辞。Thanks@duckvaderSooo…我用
method='blocks'
更新了代码,以显示经典直方图和astroml的hist之间的不同行为!这就是你想要实现的吗?好的。谷歌贝叶斯直方图获取更多信息(并了解这是否是解决您问题的有效方法)。为了澄清这个问题。我有10000个条目。只有200个条目的值大于0,并且介于0.0005和0.2之间。这个分布不是均匀的,因为只有一个元素的值为0.2,而2000个近似值为0.0005。因此,绘制它是一个问题,因为箱子的宽度必须不等,元素的数量也必须相等。上面用等式绘制了不同的箱子元素的数量,但我怀疑这是否有用。你的问题措辞非常糟糕。我现在假设,你想要一个经典的柱状图(没有每个箱子中元素数量相等的限制;但是箱子不相等以提高可视化质量。如果是这样,你应该这么说……由于措辞不当,做不必要的工作有点悲哀,但是……看看第二种方法,使用astroml(这也在astropy中实现).对不起,这句话的措辞。Thanks@duckvaderSooo…我更新了代码,用
method='blocks'
显示了经典直方图和astroml的hist之间的不同行为!这就是你想要实现的吗?好的。谷歌贝叶斯直方图获取更多信息(并了解它是否是解决问题的有效方法)。向我们展示您的代码,以便我们可以帮助您。eq_bins=[np.百分位数(数据,q)表示范围内的q(0100)]是我最初尝试的binning。向我们展示您的代码,以便我们可以帮助您。eq_bins=[np.百分位数(数据,q)表示范围内的q(0100)]I