首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用柱状图表示的值的百分比?

用柱状图表示的值的百分比?
EN

Stack Overflow用户
提问于 2012-09-07 22:46:32
回答 2查看 4K关注 0票数 2

我正在python中创建一个直方图,我希望bin边是给定值的百分比(5-10%)。最好的方法是什么,这样我就不会在bin边界上留下间隙,也不需要为bin边界计算预先设置一些值?

EN

回答 2

Stack Overflow用户

发布于 2012-09-08 01:18:40

一般来说,使用像numpy.histogram这样的预定义工具来创建直方图是很方便的,尽管你新发布的评论--暗示你正在使用matplotlib- -也完全没问题。无论采用哪种方式,您都可以创建一组宽度相等的自动确定的垃圾桶...

代码语言:javascript
复制
import numpy
data = [0,1,1,1,1,1,1,2,3,3]
hist, edges = numpy.histogram( data , bins = 10)
>>> hist
array([1, 0, 0, 6, 0, 0, 1, 0, 0, 2])
>>> edges
array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8,  2.1,  2.4,  2.7,  3. ])

...Or,在需要预定义存储箱(可能具有不同宽度)的奇数情况下,您可以自己指定存储箱边缘(有关如何工作的信息,请阅读文档):

代码语言:javascript
复制
>>> hist, edges = numpy.histogram( data , bins = [0,.5,1., 1.5,2,3])
>>> hist 
array([1, 0, 6, 0, 3])
>>> edges
array([ 0. ,  0.5,  1. ,  1.5,  2. ,  3. ])
>>> 

不过,在使用截然不同的二进制大小时,要小心。在许多情况下,这种粗粒化可能会扭曲您试图比较的数字之间的关系。

至于你的价值+/-10%的界限?

代码语言:javascript
复制
preferred_bin_centers = [0,1,2,3]
bin_pairs = [ ( 0.9* v , 1.1*v ) for v in preferred_bin_centers ]
>>> [[0.0, 0.0], [0.9, 1.1], [1.8, 2.2], [2.7, 3.3000000000000003]]

或者,将其展开为可供numpy.histogram使用的列表形式...

代码语言:javascript
复制
bin_edges = sum( [  [ 0.9* v , 1.1*v ]  for v in values ]    , [] )

>>> [0.0, 0.0, 0.9, 1.1, 1.8, 2.2, 2.7, 3.3000000000000003]

(从上面列表的前两项中注意到,如果其中一个bin中心为0,此代码会给出令人困惑的bin边缘;我将其留在此处只是为了说明需要注意的事项)

顺便说一句,如上定义的仓位边缘也将创建超出您所需范围的中间仓位。例如,如果您将1、2和3的+/- 10%内的项目放入箱中,那么本质上,在2.2和2.7 (所需箱的“外边”)之间也会有一个箱,而像2.5这样的数字将放在那里。如果在所需的存储箱之间存在值,则可能需要相应地调整截止点或可视化。

票数 1
EN

Stack Overflow用户

发布于 2012-09-07 22:50:18

也许我把你的问题过于简单化了?

代码语言:javascript
复制
def bins(data, nbins):
    range = max(data) - min(data)
    binsize = range / float(nbins)
    bins = [x * binsize for x in range(nbins)]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12320395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档