绘制直方图,最后一个箱子倾向于Inf

时间:2013-11-02 19:58:54

标签: r plot histogram

我想绘制一个直方图,其最后一个bin中包含Inf

[0,2.5] ........... [50,Inf]

c(2.5,5.0,7.5,10.0,12.5,15.0,20.0,25.0,35.0,50.0,Inf)

指每个bin的端点

[0,2.5] ........... [50,Inf]

  

hist(c( 2.5 ,5.0,7.5,10.0,12.5,15.0,20.0,25.0,35.0, 50.0 Inf ) ,      c(6.6,12.5,15.2,16.6,15.8,11.0,13.1,4.6,3.0,1.1,0.5))

我收到以下错误消息:maybe 'breaks' do not span range of 'x'

2 个答案:

答案 0 :(得分:2)

这实际上并不是很好。

brkvec <- c (2.5 , 5.0 , 7.5, 10.0, 12.5, 15.0, 20.0, 25.0, 35.0, 50.0, 
             Inf )
dat <- c (6.6 ,12.5 ,15.2 ,16.6 ,15.8 ,11.0 ,13.1 ,4.6 ,3.0 ,1.1 ,0.5 )

hist (dat , breaks=brkvec )
## Error in hist.default(dat, breaks = brkvec) : 
##     some 'x' not counted; maybe 'breaks' do not span range of 'x'

在零处添加左断点以解决此问题:

brkvec <- c(0,brkvec)
hist(dat, brkvec)

但是R不喜欢这样:

## Error in plot.window(xlim, ylim, "") : need finite 'xlim' values

如果我们想要这个,我们必须通过调整轴标签来破解它:

brkvec2 <- brkvec
brkvec2[brkvec2==Inf] <- max(brkvec2[is.finite(brkvec2)])+1
hist(dat,breaks=brkvec2,col="gray",freq=FALSE,axes=FALSE)
par(las=1,bty="l") ## cosmetic
axis(side=2)
axis(side=1,at=brkvec2,labels=brkvec)

...但是最后的标签甚至不会显示,除非你有一个非常宽的情节,因为R抑制重叠标签的方式。您可能更喜欢:

tt <- table(cut(dat,brkvec))
barplot(tt,names=names(tt))

这并不代表任何明智的类别的宽度 方式,但很难表示(50,Inf]的宽度 在任何情况下类别......

答案 1 :(得分:-1)

hist (c(6.6 ,12.5 ,15.2 ,16.6 ,15.8 ,11.0 ,13.1 ,4.6 ,3.0 ,1.1 ,0.5 )),breaks= c(0, 2.5 , 5.0 , 7.5, 10.0, 12.5, 15.0, 20.0, 25.0, 35.0, 50.0, Inf))