ggplot2中因子之间的连接线

时间:2013-02-26 18:56:57

标签: r ggplot2 linegraph

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

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

我正在使用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)

1 个答案:

答案 0 :(得分:1)

我认为你没有复制任何不一致的内容,但是你的问题部分是通过尝试将所有内容压缩为单qplot次电话而蒙上阴影。

您的x变量Length是一个因素,因此ggplot合理地认为Length 1Length 2是独立的,并且不会连接这些行

其次,您将无法使用stat_summaryx值进行汇总,而不会强迫这些值成为一个因素(因此也是独立的)。

我觉得最简单的假设数据并不依赖于ggplot。

例如

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

然后使用ggplot而非qplot构建图表,为您提供所需的灵活性(和透明度)。

让线路连接的技巧是在调用x时考虑geom_line数字,例如here

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)