Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将条形图与R中的方框图对齐_R_Plot_Alignment_Bar Chart_Boxplot - Fatal编程技术网

将条形图与R中的方框图对齐

将条形图与R中的方框图对齐,r,plot,alignment,bar-chart,boxplot,R,Plot,Alignment,Bar Chart,Boxplot,我想使用R中的barplot函数绘制计数分布图,并在其下方绘制一个箱线图,以包含关于中值、四分位数和异常值的信息。对于直方图和箱线图,已经找到了一个不太优雅的解决方案: 在网上有很多地方,人们可以找到这样的论点:数字数据应该用直方图绘制,而分类数据应该用条形图绘制。我的数据是数字的,事实上是在比率刻度上的(因为它们是计数),但因为它们是离散的,所以我想要有间隙的列,而不是接触的列,这似乎是直方图()的唯一选项 我目前有以下内容,但条形图和箱线图并没有完全对齐: set.seed(476372)

我想使用R中的barplot函数绘制计数分布图,并在其下方绘制一个箱线图,以包含关于中值、四分位数和异常值的信息。对于直方图和箱线图,已经找到了一个不太优雅的解决方案:

在网上有很多地方,人们可以找到这样的论点:数字数据应该用直方图绘制,而分类数据应该用条形图绘制。我的数据是数字的,事实上是在比率刻度上的(因为它们是计数),但因为它们是离散的,所以我想要有间隙的列,而不是接触的列,这似乎是直方图()的唯一选项

我目前有以下内容,但条形图和箱线图并没有完全对齐:

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()的所有选项分开,谢谢!然而,差距问题仍然存在。。。。