添加geom_line以链接具有ggplot2因子的boxplot中的所有geom_point

时间:2018-02-23 18:44:12

标签: r ggplot2

我的患者数据如下所示。每个受试者在4个不同的时间点进行测量。

df <- data.frame(
    result = rnorm(48, 1,3),
    time = rep(c('t1', 't2', 't3', 't4'), 12  ),
    subject = rep(c(1:12), each=4),
    gender = rep (c('M', 'F'), 6, each=4) )

我制作了一个带有重叠数据点的箱线图:

pd = position_jitterdodge(dodge.width = 0.75, jitter.width = 0.3)
df %>% 
    ggplot (aes(x= time, y=result, fill=gender))+
    geom_boxplot(alpha=0.2)+
    geom_point(aes(color = gender),position = pd)+
    scale_fill_brewer(palette = 'Set1')+
    scale_color_brewer(palette = 'Set1')

enter image description here

现在我需要添加行来链接所有患者(数据点)沿着时间进程。

df %>% 
    ggplot (aes(x= time, y=result, fill=gender))+
    geom_boxplot(alpha=0.2)+
    geom_point(aes(color = gender, group=subject),position = pd)+
    geom_line(aes(color=gender, group=subject), 
    position=pd, alpha=0.3)+
    scale_fill_brewer(palette = 'Set1')+
    scale_color_brewer(palette = 'Set1')

enter image description here

所有线路似乎都与数据点断开连接。我该如何解决这个问题?我花了几个小时但找不到解决方案。有人可以帮助我吗?非常感谢。

1 个答案:

答案 0 :(得分:2)

前几天开发版position_jitterdodge gained a seed argument。所以,

devtools::install_github("tidyverse/ggplot2")
library(ggplot2)

然后

pd = ggplot2::position_jitterdodge(dodge.width = 0.75, jitter.width = 0.3, seed = 1)
df %>% 
  ggplot (aes(x= time, y=result, fill=gender))+
  geom_boxplot(alpha=0.2)+
  geom_point(aes(color = gender, group=subject),position = pd)+
  geom_line(aes(color=gender, group=subject), 
            position=pd, alpha=0.3)+
  scale_fill_brewer(palette = 'Set1')+
  scale_color_brewer(palette = 'Set1')

给出了这个情节

enter image description here