我正在绘制y
的箱线图,用于两个变量x1
和x2
之间的互动。问题是,对于没有数据的级别,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
,因此这些点与群组不对应:
我可以从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]
答案 0 :(得分:3)
您可以创建一个包含与interaction
的互动的变量。然后,您可以使用droplevels
删除未使用的级别:
boxplot(y ~ droplevels(interaction(x1, x2)), t)
points(aggregate(y ~ droplevels(interaction(x1, x2)), t, mean)$y, col="red")