R 如何显示两组箱线图?

R 如何显示两组箱线图?,r,boxplot,R,Boxplot,我有两组数据(x1和x2与y1和y2),我想显示为两组箱线图 我尝试了以下方法,但它显示了错误的数据,因为向量x1和x2(以及y1和y2)的长度不同: x1 <- c(2,3,4) x2 <- c(0,1,2,3,4,5) y1 <- c(3,4,5) y2 <- c(1,2,3,4,5,6) d0 <- matrix(c(x1, x2), ncol=2) d1 <- matrix(c(y1, y2), ncol=2) lmts <- rang

我有两组数据(x1和x2与y1和y2),我想显示为两组箱线图

我尝试了以下方法,但它显示了错误的数据,因为向量x1和x2(以及y1和y2)的长度不同:

x1 <- c(2,3,4)
x2 <- c(0,1,2,3,4,5)

y1 <- c(3,4,5)
y2 <- c(1,2,3,4,5,6)

d0 <- matrix(c(x1, x2),  ncol=2)
d1 <- matrix(c(y1, y2),  ncol=2)

lmts <- range(d0,d1)

par(mfrow = c(1, 2))
boxplot(d0, ylim=lmts, xlab="x")
boxplot(d1, ylim=lmts, xlab="y")

x1是的,或者您可以使用

lmts <- range(x1,x2,y1,y2)
par(mfrow = c(1, 2))
boxplot(x1, x2, ylim=lmts,names=c("x1","x2"),xlab="x")
boxplot(y1, y2, ylim=lmts,names=c("y1","y2"),xlab="y")

另一个选项是使用ggplot2包。要将数据放入一个data.frame中,还需要做一些工作。但这很容易

library(ggplot2)
dataset <- data.frame(
    Group = c(rep("x1", length(x1)), rep("x2", length(x2)), rep("y1", length(y1)), rep("y2", length(y2))),
    Subplot = c(rep("x", length(x1) + length(x2)), rep("y", length(y1) + length(y2))),
    Value = c(x1, x2, y1, y2))
ggplot(dataset, aes(x = Group, y = Value)) + geom_boxplot() + facet_wrap(~Subplot, scales = "free_x")
库(ggplot2)

您键入了d0和d1吗?它们真的是你想要的吗?+1,我正要自己发布这个解决方案。请注意,这两种方法产生不同的结果!我想这可能是因为他们对待不适用项目的方式,但我不确定。嗯,有趣的是Ben。添加了一个图像以显示差异。我认为你的评论是对的。这在这个方法中不是一个问题,因为我们使用的是没有NAs的向量等。是的,在Tukey图上刷新我的记忆时,框的边界应该在第25和第75百分位。对于3个数据点,这将分别拆分2/3和3/4点(对于x)。对于5个数据点,其中两个为N/A,我不确定如何“正确”计算。编辑添加:事实上,我甚至不确定没有NA的3个数据点的“正确”百分位数是多少,现在我想了想。嘿,这让我想起了我去分位数的时候,发现有9种不同的方法来计算分位数。在大多数情况下,我仍然倾向于把头埋在沙子里……哎呀,我删除了我的答案,建议使用
data.frame(x1,x2)
,因为它不正确,因为长度不同,就像使用矩阵一样。你的结果是正确的,nzoops。
library(ggplot2)
dataset <- data.frame(
    Group = c(rep("x1", length(x1)), rep("x2", length(x2)), rep("y1", length(y1)), rep("y2", length(y2))),
    Subplot = c(rep("x", length(x1) + length(x2)), rep("y", length(y1) + length(y2))),
    Value = c(x1, x2, y1, y2))
ggplot(dataset, aes(x = Group, y = Value)) + geom_boxplot() + facet_wrap(~Subplot, scales = "free_x")