2013-02-26 45 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