【问题标题】:GGPlot multiple lines ending at the same pointGGP绘制在同一点结束的多条线
【发布时间】:2018-08-28 13:57:39
【问题描述】:

我一直在尝试使用 ggplot2 从我的数据集中绘制数据。下面,您可以看到图表。观察的数量被放置在 x 轴上,而在行为评分量表上获得的分数被绘制在 y 轴上。这些分数是在两个连续条件下收集的(A = 基线,B = 干预),每个受试者的长度不同。

df <- read.table(header = TRUE, text = "
    case measure session phase_id outcome condition
1      1       3       1        A       4         A
2      1       3       2        A      10         A
3      1       3       3        A      10         A
4      1       3       4        B      10         B
5      1       3       5        B      10         B
6      1       3       6        B      10         B
7      1       3       7        B      12         B
8      1       3       8        B      10         B
9      1       3       9        B      20         B
10     3       3       1        A      13         A
11     3       3       2        A      12         A
12     3       3       3        A       5         A
13     3       3       4        A       0         A
14     3       3       5        A      10         A
15     3       3       6        A       4         A
16     3       3       7        A       3         A
17     3       3       8        B       4         B
18     3       3       9        B      14         B
19     3       3      10        B      25         B
20     3       3      11        B      25         B
21     3       3      12        B      20         B
22     3       3      13        B      25         B
23     3       3      14        B      24         B
24     3       3      15        B      13         B
25     6       3       1        A       7         A
26     6       3       2        A       6         A
27     6       3       3        A       9         A
28     6       3       4        A       0         A
29     6       3       5        A       9         A
30     6       3       6        B       6         B
31     6       3       7        B      14         B
32     6       3       8        B       6         B
33     6       3       9        B       7         B
")

我想做的是在图表的中间建立一个点,与 A 阶段相关的所有数据都在该点结束,这样 A 阶段将在同一点结束,B 阶段将从同一点开始每个参与者的分数。

df %>% 
  ggplot(aes(session, outcome, color)) +
  geom_line(aes(group = case, color = condition), size = 0.1, alpha = 0.4) +
  geom_smooth(aes(color = condition), size = 2, method = "lm") +
  theme_minimal() +
  theme(legend.position = "none")

更新

这将是我想要的解决方案(也许两个阶段之间没有连续的线)。

感谢您的帮助!

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    虽然我不太了解 Sessions 的转移,但我猜你想要这样的东西:

    endVal <- max( df[df$phase_id=="A","session"] )
    

    endVal 计算阶段 A 中的最后一个值。变量 session2 根据该值移动。

    addToCase <- df %>%
     filter(phase_id=="A") %>%
     group_by(case) %>% 
     summarise(addValue =  endVal - max(session) )
    
    dataPhases <- merge(df, addToCase, by="case") %>%
     mutate(session2 = session + addValue)
    
    dataPhaseA <- dataPhases %>%
     filter(phase_id == "A")  
    
    dataPhaseB <- dataPhases %>%
     filter(phase_id == "B")
    

    还有ggplot:

    ggplot(dataPhaseA,
      aes(x=session2, y=outcome, colour=phase_id, group=case) ) + 
     geom_line() + 
     geom_smooth(aes(group=phase_id), size = 2, method = "lm") +
     geom_line(data=dataPhaseB,
      aes(x=session2, y=outcome, colour=phase_id, group=case) ) + 
     geom_smooth(data=dataPhaseB, aes(group=phase_id), size = 2, method = "lm") + 
     theme_minimal() +
     theme(legend.position = "none")
    

    情节如下:

    【讨论】:

    • 感谢您的回答,@Lstat!我提供了一个新图表(我手动更改了数据集中的数据)。希望我想做的事情会更清楚。
    • 澄清一下:1/你不想要一个goem_point(“就是在图的中间建立一个点”)2/geom_smooth不是基于条件(条件是重叠的)
    • 谢谢!确切地说,我的意思是找到一种方法,根据 A 阶段最长的病例为所有病例的会话提供新的数字,以便病例可以在同一点结束,并且图中的两条线不会重叠。
    • 我认为改变会话将有助于读者看到两个阶段之间的区别。我可能最终会使用您以前的解决方案,但我认为两条单独的行不会那么混乱,因为没有重叠。
    • 我很高兴它有帮助。如果它提高了可解释性,那就去吧!我将这个新变量称为 session2,因为它不再是原始比例。如果文本中没有正确描述,这可能会让读者感到困惑......祝你未来的努力好运!
    猜你喜欢
    • 2018-12-19
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多