2011-03-11 28 views
2

我正在嘗試使用跨ggplot中的因子的線複製批次/案件/處理的dotplot。這就是說,從道格拉斯Bates的線性模型當然這個曲線圖,其示出了在y軸上6個基團與在x軸上的連續響應與平均用於通過線連接各組: Dotplot from Bates在dotplot中添加線交叉因子(ggplot)

使用sleepstudy數據集與lme4包作爲一個例子捆綁,我有:

library(ggplot2) 
p <- ggplot(sleepstudy, aes(x=Reaction, y=reorder(Subject, Reaction))) 
p <- p + geom_point() 
print(p) 

其中在增加反應時間的順序給出了基本的點陣圖,其中在y軸上的受試者。

我然後創建平均反應時間爲每個主題一個數據幀:

mean_rxn <- function(df) mean(df$Reaction, na.rm=T) 
sleepsummary <- ddply(sleepstudy, .(Subject), mean_rxn) 

我能夠在平均積點,每個主題:

p.points <- p + geom_point(data=sleepsummary, aes(x=V1, y=reorder(Subject, V1), size=10)) 
print(p.points) 

但我不能獲得線路以跨越因素。也就是說,從geom_point改爲geom_line無顯示

# does nothing 
p.line <- p + geom_line(data=sleepsummary, aes(x=V1, y=reorder(Subject, V1))) 
print(p.line) 

人有什麼想法?最終,我的目標是以這種方式在原始數據之上繪製一些模型結果,因此計算在原始數據框的繪圖中「即時」意味着的方法不太有用,因爲我需要從中獲取數據點一個更復雜的模型適合。

感謝您的幫助!

瑞安

回答

4

編輯

我的第一個建議是陰謀前值的數字轉換。

p.line <- p + 
    geom_line(data=sleepsummary, aes(x=V1, y=as.numeric(reorder(Subject, V1)))) 

但是哈德利指出優選在溶液中使用組= 1,而不是as.numeric():

p.line <- p + 
    geom_line(data=sleepsummary, aes(x=V1, y=reorder(Subject, V1), group=1)) 
print(p.line) 

enter image description here

+1

轉換爲數字通常是錯誤的。使用組= 1 – hadley 2011-03-11 21:42:50

+0

謝謝哈德利。我編輯了答案以反映您的評論。 – Andrie 2011-03-11 22:21:53

3

也可以使用stat_summary這樣這:

require(lme4) 
require(ggplot2) 

data(sleepstudy) 

ggplot(sleepstudy, aes(x = reorder(Subject, Reaction), y = Reaction)) + 
geom_point() + 
stat_summary(fun.y = mean, geom = "line", aes(group = 1)) + 
labs(x = "Subject", y = "Reaction") + 
coord_flip() 
+0

謝謝!對於其他應用程序,我一定會記住這一點。不幸的是,對於我的實際問題(不是這個例子),我需要繪製比stat_summary支持更多的東西。 – Ryan 2011-03-11 22:34:38