从不同的data.frame添加stripplot

时间:2014-04-03 17:31:27

标签: r ggplot2

使用这两个data.frames,

ds.SG

> head(subset(ds.SG, mapped %in% c("rowA", "rowH")))
   starttime mapped meandist        se
1          0   rowA 126.2125  9.094259
8          0   rowH 113.3708  9.552690
9         60   rowA 134.4000 10.693561
16        60   rowH 115.8542  9.618504
17       120   rowA 148.9458 10.630781
24       120   rowH 124.8958 12.446691

tdists

> head(subset(tdists, Group1=="rowA" & Group2=="rowH" & value<0.05))
    starttime Group2 Group1        value        vs
259       540   rowH   rowA 0.0273469043 rowA.rowH
287       600   rowH   rowA 0.0032981182 rowA.rowH
315       660   rowH   rowA 0.0170252864 rowA.rowH
343       720   rowH   rowA 0.0195995924 rowA.rowH
371       780   rowH   rowA 0.0047677680 rowA.rowH
399       840   rowH   rowA 0.0004149648 rowA.rowH

我可以创建以下2个图:

AB.distplot <-qplot(starttime, meandist, data=subset(ds.SG, mapped %in% c("rowA", "rowH")),
                    geom="line",colour=mapped, alpha=1)  
             + geom_ribbon(aes(ymin=meandist-se, ymax=meandist+se, alpha=0.1, fill=mapped, colour=NULL)) 
             + geom_line(size=1)

mean distance +/- SE, by group at each time point

AB.Tplot <-qplot(starttime, 0, data = subset(tdists, Group1=="rowA" & Group2=="rowH" & value<0.05))

timepoints at which p-value for rowA and rowH distances is < 0.05

我希望将它们组合在一起AB.Tplot

底部{}}过度绘制

根据我发现here的想法,我尝试了这个:

AB.distplot

由于&#39;映射&#39;仅在AB.distplot + geom_point( data = subset(tdists, Group1=="rowA" & Group2=="rowH" & value < 0.5), aes(starttime, 0), position = position_jitter(height=0.8), size=1) #Error in eval(expr, envir, enclos) : object 'mapped' not found 中,我不希望在ds.SG中找到它(在tdists中使用)。为什么geom_point正在寻找它,我怎么能超越我喜欢的方式呢?

解决方案

由于@Joram没有我的所有数据,他无法确切地看到该情节将如何结果。在他出色的解释之后,这就是我所做的和我得到的:

ggplot

working plot

1 个答案:

答案 0 :(得分:2)

这个答案有些推测,因为我只有一小部分数据可供使用。

但我认为是时候停止使用qplot

您遇到错误的原因是, ggplot2 中的图层之间会继承美学映射。因此,您在qplot内映射的美学将向下传递到每个后续图层,除非它们被重新定义或显式取消映射。

出于这个原因,当使用不同的数据集构建具有大量图层的图时,使用更明确的ggplot表示法通常会更加清晰。

认为这更像是你所追求的:

tdists$y <- 0             
ggplot(data = subset(ds.SG, mapped %in% c("rowA", "rowH")),aes(x = starttime,y = meandist)) +  
    geom_ribbon(aes(ymin=meandist-se, ymax=meandist+se, alpha=0.1, fill=mapped, colour=NULL)) +
    geom_line(aes(colour = mapped),alpha = 1,size = 1) +
    geom_point(data = subset(tdists, Group1=="rowA" & Group2=="rowH" & value < 0.5),
               aes(y = y), 
               position = position_jitter(height=0.8), 
               size=1)

您的原始qplot来电应该基本上包含geom_line图层,因此我不确定您为何添加了另一个geom_line来电。也许它被功能区掩盖了。同样,明确地构建以ggplot()开头的层使得这一点更加清晰。