将条形图与R中的方框图对齐
我想使用R中的barplot函数绘制计数分布图,并在其下方绘制一个箱线图,以包含关于中值、四分位数和异常值的信息。对于直方图和箱线图,已经找到了一个不太优雅的解决方案: 在网上有很多地方,人们可以找到这样的论点:数字数据应该用直方图绘制,而分类数据应该用条形图绘制。我的数据是数字的,事实上是在比率刻度上的(因为它们是计数),但因为它们是离散的,所以我想要有间隙的列,而不是接触的列,这似乎是直方图()的唯一选项 我目前有以下内容,但条形图和箱线图并没有完全对齐:将条形图与R中的方框图对齐,r,plot,alignment,bar-chart,boxplot,R,Plot,Alignment,Bar Chart,Boxplot,我想使用R中的barplot函数绘制计数分布图,并在其下方绘制一个箱线图,以包含关于中值、四分位数和异常值的信息。对于直方图和箱线图,已经找到了一个不太优雅的解决方案: 在网上有很多地方,人们可以找到这样的论点:数字数据应该用直方图绘制,而分类数据应该用条形图绘制。我的数据是数字的,事实上是在比率刻度上的(因为它们是计数),但因为它们是离散的,所以我想要有间隙的列,而不是接触的列,这似乎是直方图()的唯一选项 我目前有以下内容,但条形图和箱线图并没有完全对齐: set.seed(476372)
set.seed(476372)
counts1 <- rpois(10000,3)
nf <- layout(mat = matrix(c(1,2),2,1, byrow=TRUE), height = c(3,1))
par(mar=c(3.1, 3.1, 1.1, 2.1))
barplot(prop.table(table(counts1)))
boxplot(counts1, horizontal=TRUE, outline=TRUE,ylim=c(0,12), frame=F, width = 10)
set.seed(476372)
计数1可能在最后使用“假”直方图
ht=hist(counts1,breaks=12,plot = F)
ht$counts=as.numeric(table(counts1))
ht$density=as.numeric(prop.table(table(counts1)))
ht$breaks=as.numeric(names(table(counts1)))
ht$mids=sapply(1:(length(ht$breaks)-1),function(z)mean(ht$breaks[z:(z+1)]))
plot(ht,freq=F,col=3,main="")
boxplot(counts1, horizontal=TRUE,outline=TRUE,ylim=range(ht$breaks), frame=F, col="green1", width = 10)
另一个类似的选项,但需要做更多的工作。这将保留条之间间隙的选项:
tbl <- prop.table(table(counts1))
left <- -0.4 + do.call('seq', as.list(range(counts1)))
right <- left + (2 * 0.4)
bottom <- rep(0, length(left))
top <- tbl
xlim <- c(-0.5, 0.5) + range(counts1)
nf <- layout(mat = matrix(c(1,2),2,1, byrow=TRUE), height = c(3,1))
par(mar=c(3.1, 3.1, 1.1, 2.1))
plot(NA, xlim=xlim, ylim=c(0, max(tbl)))
rect(left, bottom, right, top, col='gray')
boxplot(counts1, horizontal=TRUE, outline=TRUE, ylim=xlim, frame=F, width = 10)
tbl如果其中一个答案符合您的需要,您能接受吗?它提供了一个内部的结束,所以(不管这是否是我的答案),是对回答者的一个轻拍。你好@r2evans,谢谢,看起来很棒。我还不知道rect()函数,所以这绝对是一个非常有用的知识收获。在这里对齐是因为plot()和boxplot()具有相同的对齐方式?它对齐是因为我们将xlim
计算为我们认为应该的值,并强制plot
和boxplot
使用它rect
是一个较低级别的函数;如果您经常这样做,那么创建一个类似于hist
的函数就不难了,它接受了许多/大部分与hist
相同的参数,并添加了gap
或类似的内容。是的,我看到您设置了ylim=xlim
。但是,如果我执行以下操作:限制如果查看条形图
中的返回值,您将看到(以及帮助中讨论的)它告诉您每个条形图的中心在x轴上的位置。我还没有试着去探索整个条形图。默认的函数,但是我无法想象为什么中点会被选择。由于无法强制barplot
使用不同的逻辑,因此我必须手动使用plot
和rect
。您好@Robert,如果确实有指导意义,请将hist()的所有选项分开,谢谢!然而,差距问题仍然存在。。。。