如何将两个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")
我用 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")