R将多个箱线图堆叠在一起

R stack multiple boxplot on top of each other

我正在尝试制作一些箱线图。这是一个示例数据

set.seed(1)

a<-rnorm(100)
a1<-rnorm(100);a2<-rnorm(100);a3<-rnorm(100);a4<-rnorm(100)
b1<-rnorm(100);b2<-rnorm(100);b3<-rnorm(100);b4<-rnorm(100)
c1<-rnorm(100);c2<-rnorm(100);c3<-rnorm(100);c4<-rnorm(100)
d1<-rnorm(100);d2<-rnorm(100);d3<-rnorm(100);d4<-rnorm(100)
e1<-rnorm(100);e2<-rnorm(100);e3<-rnorm(100);e4<-rnorm(100)
f1<-rnorm(100);f2<-rnorm(100);f3<-rnorm(100);f4<-rnorm(100)  

dat<-data.frame(a,a1,a2,a3,a4,b1,b2,b3,b4,c1,c2,c3,c4,d1,d2,d3,d4,e1,e2,e3,e4,f1,f2,f3,f4)

par(mfrow=c(4,1))
boxplot(dat$a,dat$a1,dat$b1,dat$c1,dat$d1,dat$e1,dat$f1)

boxplot(dat$a,dat$a2,dat$b2,dat$c2,dat$d2,dat$e2,dat$f2)

boxplot(dat$a,dat$a3,dat$b3,dat$c3,dat$d3,dat$e3,dat$f3)

boxplot(dat$a,dat$a4,dat$b4,dat$c4,dat$d4,dat$e4,dat$f4)

这是结果图

如您所见,四个箱线图彼此重叠。有什么办法可以将这些图叠加在一起,使它们之间没有空格,并使箱线图变小(即图中的框)

我认为做 par(mfrow=c(4,1)) 应该可以解决问题,但它在绘图之间留下了很多空间。理想情况下,我想要一个 x 轴和一个 y 轴(进一步分成四个轴以显示每个图的值)

谢谢

您可以使用par(mar=c(0,0,0,0)) 去掉整个图形的边距。调整四个 mar 值将改变页边距(参见 ?par)。

至于改变箱线图的大小,您可以调整 boxplot 函数中的 boxwex 参数(参见 ?boxplot)。这是同时更改 marboxwex.

的代码
par(mfrow=c(4,1), mar=c(2,3,0,1))
boxplot(dat$a,dat$a1,dat$b1,dat$c1,dat$d1,dat$e1,dat$f1, boxwex=0.25)
boxplot(dat$a,dat$a2,dat$b2,dat$c2,dat$d2,dat$e2,dat$f2, boxwex=0.5)
boxplot(dat$a,dat$a3,dat$b3,dat$c3,dat$d3,dat$e3,dat$f3, boxwex=0.75)
boxplot(dat$a,dat$a4,dat$b4,dat$c4,dat$d4,dat$e4,dat$f4, boxwex=1, 
        names=1:7)

如果你想完全摆脱地块之间的space,你可以将mar的第一个元素设置为0,但这样看起来不是特别好,这使得在不改变其相对于前三个图的大小的情况下获得底部图中的 x 轴变得更加棘手。

您可以尝试的另一种替代方法是将所有箱线图放在一个图中,但每个类别 (1-7) 都有并排箱线图。您可以在 boxplot 函数中使用 at 参数来指定每个箱线图沿 x 轴的位置。