添加 geom_line 以链接箱图中的所有 geom_point,以 ggplot2 的因子为条件

zes*_*sla 3 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) )
Run Code Online (Sandbox Code Playgroud)

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

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')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在我需要添加线条来链接时间过程中的所有患者(数据点)。

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')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

所有的线条似乎都“与数据点断开了”。我该如何解决这个问题?我花了几个小时但找不到解决方案。有人可以帮我吗?多谢。

ero*_*oar 5

前几天在开发版本中position_jitterdodge 获得了种子争论。所以,

devtools::install_github("tidyverse/ggplot2")
library(ggplot2)
Run Code Online (Sandbox Code Playgroud)

进而

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')
Run Code Online (Sandbox Code Playgroud)

给出这个情节

在此输入图像描述