如何将两个ggline图合并为一个?

How to merge two ggline graphs into one?

我用 ggline(ggpubr R 包)制作了两个图表。我想将它们合并到一个图中(不是并排,而是将两个代码生成的线条放在一个图中,类似于图像的两个合并层),但尽管进行了搜索和尝试,我还没有找到解决方案.有没有办法直接在 R 中合并它们(或者用其他包生成类似的图形以便能够合并它们)?我知道,例如对于 plot() 函数,您可以使用 lines() 或 points() 将其他图形添加到同一输出。 ggline有类似的方法吗?

我的数据看起来像这样(最初的问题是使用示例 R 数据 ChickWeight 提出的,我现在已经为我的数据编辑了所有内容):

   Sample Category Individual Value
   <chr>  <chr>    <chr>      <dbl>
 1 01     E        E66         14  
 2 02     E        E66         13.5
 3 03     E        E66         13.3
 4 04     E        E66         13.2
 5 05     E        E66         13.3
 6 06     E        E66         13.1
 7 07     E        E66         12.5
 8 08     E        E66         13.4
 9 09     E        E66         13.2
10 10     E        E66         13.1
11 01     A        A13         14.6
12 02     A        A13         14.1
13 03     A        A13         14.3
14 04     A        A13         14.3
15 05     A        A13         14.3
16 06     A        A13         14.3
17 07     A        A13         14.3
18 08     A        A13         14.1
19 09     A        A13         13.8
20 10     A        A13         13.7
21 01     E        E62         13  
22 02     E        E62         12.4
23 03     E        E62         12.4
24 04     E        E62         12.3
25 05     E        E62         12.1
26 06     E        E62         13.6
27 07     E        E62         12.1
28 08     E        E62         12  
29 09     E        E62         12.5
30 10     E        E62         12  
31 01     E        E65         15.4
32 02     E        E65         14.7
33 03     E        E65         14.8
34 04     E        E65         14.9
35 05     E        E65         15.1
36 06     E        E65         15.3
37 07     E        E65         14.7
38 08     E        E65         14.6
39 09     E        E65         14.6
40 10     E        E65         14.8
41 01     E        E69         16.5
42 02     E        E69         15.8
43 03     E        E69         16  
44 04     E        E69         15.8
45 05     E        E69         15.9
46 06     E        E69         16.1
47 07     E        E69         15.8
48 08     E        E69         15.6
49 09     E        E69         15.9
50 10     E        E69         15.7

图 1

    ggline(data, x = "Sample", y = "Value", color = "Category",
        add = c("mean_sd"),
        palette = c("red", "blue", "green")) + geom_hline(yintercept=14.12, linetype="dashed", color = "black")

Graph1

图 2

   ggline(data, x = "Sample", y = "Value", color = "Individual", palette = "grey", point.size=1.5, shape  = "Category")

Graph2

我尝试使用答案中的代码,但收到错误消息: geom_path:每组仅包含一个观察值。需要调整一下群审美吗?

然后我添加了group=1,即

ggplot(data, aes(x = Sample, y = Value, group=1)) +
  geom_path(aes(color = Category), alpha = 0.5) + 
  stat_summary(aes(color = Category), fun.y = "mean", geom = "line", size =1) +  
  stat_summary(aes(color = Category), fun.y = "mean", geom = "point",size =2) +  
  stat_summary(aes(color = Category), fun.data = "mean_sd", geom = "errorbar", width = 0.3,size =1) +
  geom_hline(yintercept=14.2, linetype="dashed", color = "black") +
  theme(legend.position = "top")

但图表仍然不正确,只有 1 个类别(不是两个)的标准偏差 (SD) 条和背景中的个别线条与图表 2 不对应。

Graph3

我尝试将类别更改为数字 1、2 而不是 A、E,并将个人更改为 66 而不是 E66,并使用 as.character 和 as.numeric 来正确定义列,但是背景线仍然不是它们应该的那样,我只设法为两个类别设置了 SD 条。

在此先感谢您,如果您需要更多信息,请告诉我。

你可以试试这个....我排除了 Chick 级别不超过 11 个级别,可以使用 linetype

绘制
set.seed(123)
ChickWeight %>% 
    filter(Chick %in% sample(1:50, 11) ) %>% 
ggplot(., aes(x =Time, y =weight)) +
  geom_line(aes(linetype = Chick, color = Diet)) + 
  stat_summary(aes(color = Diet), fun.y = "mean", geom = "line") +  
  stat_summary(aes(color = Diet), fun.y = "mean", geom = "point") +  
  stat_summary(aes(color = Diet), fun.data = "mean_se", geom = "errorbar", width = 0.3) +
  theme(legend.position = "top")

由于 Chick 信息不是真正可见和有用的,我推荐这样的东西:

ggplot(ChickWeight, aes(x =Time, y =weight)) +
  geom_path(aes(color = Diet), alpha = 0.5) + 
  stat_summary(aes(color = Diet), fun.y = "mean", geom = "line", size =1) +  
  stat_summary(aes(color = Diet), fun.y = "mean", geom = "point",size =2) +  
  stat_summary(aes(color = Diet), fun.data = "mean_se", geom = "errorbar", width = 0.3,size =1) +
  theme(legend.position = "top")