0

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

[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.0.5 ,3.0 ,1.1 ))

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

4

2 回答 2

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] 类别的宽度......

于 2013-11-02T20:40:43.157 回答
-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))
于 2013-11-02T20:27:28.397 回答