我想绘制一个直方图,其最后一个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'
答案 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))