2011-03-11 50 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