2013-02-26 70 views
0

我试图创建一个简单的手段和交互线图。我在y轴上有一个DV(读取次数),在x轴上有一个因子(长度),另一个作为分组变量(位置)。ggplot2中因子之间的连接线

我使用的语法如下。将数据绘制为两条长度条件中的每一条的一条线上的单个点,但未连接两条长度条件之间的线。我在语法方面缺少什么?

我使用R i386 2.15.2,并在上周更新了ggplot2。

这里是一个重复的例子,

SubjectID <- c(101,101,101,101,101,101,101,101,102,102,102,102,102,102,102,102, 
     201,201,201,201,201,201,201,201,202,202,202,202,202,202,202,202) 
Group <- c("PWA","PWA","PWA","PWA","PWA","PWA","PWA","PWA","PWA","PWA","PWA", 
     "PWA","PWA","PWA","PWA","PWA","Control","Control","Control", 
     "Control","Control","Control","Control","Control","Control", 
     "Control","Control","Control","Control","Control","Control", 
     "Control") 
Length <- c(1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2) 
Pos <- c(1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2,1,1,2,2) 
ReadT <- c(6.7,7.6,6.4,7.9,5.4,6.4,6.3,7.4,6.9,7.2,6.7,7.4,5.7,6.1,6.5,7.8, 
     6.1,5.7,4.9,6.1,4.7,6.5,6.1,6.2,6.9,5.9,4.8,6.5,4.6,6.3,6.7,6.6) 

data <- data.frame (SubjectID, Group,Length,Pos,ReadT) 
data$Length <- factor(data$Length, order = TRUE, 
     levels = c(1,2), 
     labels = c("Length 1", "Length 2")) 
data$Pos <- factor(data$Pos, order = TRUE, 
     levels = c(1,2), 
     labels = c("Position 1", "Position 2")) 

qplot(Length, data=data, ReadT, geom=c("point", "line"), 
    stat="summary", fun.y=mean, group=Pos, colour=Pos, 
    facets = ~Group) 
+6

请提供[可重现的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) - 添加示例数据,最好使用dput() – 2013-02-26 18:59:04

回答

0

我不认为你已经转载任何不一致之处,但在部分你的问题,试图凝聚一切成单qplot呼叫蒙上阴影。

x变量Length是一个因素,因此ggplot是理智考虑Length 1Length 2是独立的,并不会连接线。其次,您将无法使用stat_summary来总结您的x值,而不会强迫这些因素成为因素(因此也是无关因素)。

我发现最简单的数据预处理并不依赖于ggplot。

library(plyr) 
data.means <- ddply(data, .(Group, Pos, Length), summarize, ReadT = mean(ReadT)) 

然后构建使用ggplot没有qplot,给你所需的灵活性(和透明度)的情节。

的技巧,以获得线路连接是考虑x数字呼叫内geom_linehere例如

ggplot(data.means, aes(x= Length, y= ReadT, colour = Pos)) + 
geom_point() + 
geom_line(aes(x=as.numeric(Length))) + 
facet_grid(~Group) 

如果你坚持使用的原始数据,并stat_xxxx功能,你可以也使用stat_smooth来重复此操作以估计平均值(其将x分类为数字)

ggplot(data, aes(x = Length, y= ReadT, colour = Pos)) + 
stat_summary(fun.y = 'mean', geom = 'point')+ 
stat_smooth(method = 'lm', aes(x=as.numeric(Length)), se = FALSE) + 
facet_grid(~Group) 
+0

绝对正确,我一直无法复制它的一次工作 - 这仍然是一个谜。我已经从标题和问题中编辑了这部分内容。感谢您提供非常有帮助的意见!我还看到另一篇文章解决了同样的问题(我之前错过了),指出了另一个可能对此有帮助的软件包 - 请参阅:ggplot2:连接分组数据手段的行 – user2112401 2013-02-27 02:09:19

+0

在第一个ggplot代码中需要有3圆括号mafter ..数字(长度 – user2112401 2013-02-27 02:46:31

+0

确实,...固定。 – mnel 2013-02-27 02:48:04