Boxplots:避免由于不存在的交互而产生的空白

时间:2014-04-13 17:17:13

标签: r boxplot

我正在绘制y的箱线图,用于两个变量x1x2之间的互动。问题是,对于没有数据的级别,boxplot仍然显示方框图的空白。

如何轻松避开空白区?实际上,我有两个以上的因素水平。另外,我想避免使用基于ggplot2的解决方案。

示例:

> set.seed(0)
> t <- data.frame(y =rnorm(60),
                  x1 = rep(c("a","a","b"), each=20),
                  x2 = rep(c("c","d","d"), each=20))
> boxplot(y~x1+x2, t)
> points(aggregate(y~x1+x2, t, mean)$y, col="red")

绘制均值的points函数不知道缺少的互动b.c,因此这些点与群组不对应:

enter image description here

我可以从boxplot(y~x1+x2, t, plot=F)的输出中解决这个问题,但我不知道如何轻松地绘制修改过的对象。

> b <- boxplot(y~x1+x2, t, plot=F)
> i <- complete.cases(t(b$stats))
> b$stats <- b$stats[,i]
> b$n <- b$n[i]
> b$conf <- b$conf[,i]
> b$names <- b$names[i]

1 个答案:

答案 0 :(得分:3)

您可以创建一个包含与interaction的互动的变量。然后,您可以使用droplevels删除未使用的级别:

boxplot(y ~ droplevels(interaction(x1, x2)), t)

points(aggregate(y ~ droplevels(interaction(x1, x2)), t, mean)$y, col="red")

enter image description here