r - 在点图(ggplot)中添加线交叉因子

标签 r ggplot2

我正在尝试用穿过 ggplot 中的因素的线复制批处理/病例/治疗的点图。这有点像 Douglas Bates 的线性模型类(class)中的这个图,它在 y 轴上显示 6 个组,在 x 轴上有连续响应,每个组的平均值由一条线连接: Dotplot from Bates

以与 lme4 包捆绑在一起的 sleepstudy 数据集为例,我有:

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

这给出了基本的点图,y 轴上的对象按 react 时间的增加顺序排列。

然后我创建了一个数据框,其中包含每个受试者的平均 react 时间:

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)

有人有什么想法吗?最终,我的目标是以这种方式在原始数据之上绘制一些模型结果,因此在绘制原始数据框时计算意味着“即时”的方法不太有用,因为我需要从中获取数据点更复杂的模型拟合。

感谢您的帮助!

瑞安

最佳答案

已编辑

我的第一个建议是在绘图之前将值转换为数字。

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

但是 Hadley 指出在解决方案中使用 group=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

关于r - 在点图(ggplot)中添加线交叉因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5276237/

相关文章:

r - 如何在 ggplot 中重现 smoothScatter 的离群值绘图?

r - 如何在 facet_nested 中订购 x 轴

r - 使用 ggplot2 在 log10 刻度上进行小刻度

python 的 scipy.stats.ranksums 与 R 的 wilcox.test

r - H2o GLM 仅与某些预测因子相互作用

r - 在 R 中向图中添加特殊字符

r - 在ggplot2中,如何添加其他图例?

R - 比较 R 中 2 个数据帧之间的数据

r - 在 ggplot2 中创建计数频率的直方图

r - 自动调整使用 ggplot2 绘制的图例的大小,使整个图例位于图层的边界内