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
)。这是同时更改 mar
和 boxwex
.
的代码
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 轴的位置。
我正在尝试制作一些箱线图。这是一个示例数据
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
)。这是同时更改 mar
和 boxwex
.
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 轴的位置。