GGPlot多行结束于同一点

时间:2018-08-28 13:57:39

标签: r ggplot2

我一直在尝试使用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")

enter image description here

更新

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

enter image description here

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

尽管我不太了解Session的变化,但我想你想要这样的东西:

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")

图看起来像: enter image description here