【发布时间】:2022-01-17 14:15:52
【问题描述】:
总共 38 列。治疗栏中的 10 种治疗类型,日期栏中的日期为 25-29 数据示例代码:
df <- structure(
list(
Christensenellaceae = c(
0,
0.009910731,
0.010131195,
0.009679938,
0.01147601,
0.010484508,
0.008641566,
0.010017172,
0.010741488,
0.1,
0.2,
0.3,
0.4),
date=c(25,25,25,25,25,27,27,27,27,27,27,27,27),
Treatment = c(
"Original Sample_25",
"Original Sample_25",
"Original Sample_25",
"Original Sample_25",
"Original Sample_25",
"Treatment 1_27",
"Treatment 1_27",
"Treatment 1_27",
"Treatment 1_27",
"Treatment 2_27",
"Treatment 2_27",
"Treatment 2_27",
"Treatment 2_27")
),class = "data.frame",
row.names = c(NA,-9L)
)
我想要做的是为每一列创建 2 个图,一个用于原始样本,一个用于治疗(日期和治疗列除外),并且治疗列将有 10 条平均线作为治疗次数(见数据图片)我只为治疗 1 做到了这一点:看起来像这样:
但遗憾的是不知道如何按治疗类型对平均线进行分组。 这是我的代码:
data_work %>%
pivot_longer(-treatment) %>%
mutate(plot = ifelse(str_detect(treatment, "original"),
"Original sample",
"Treatment 1"),
treatment = str_extract(treatment, "\\d+$")) %>%
group_by(name) %>%
group_split() %>%
map(~.x %>% ggplot(aes(x = factor(treatment), y = value, color = factor(name))) +
geom_point() +
stat_summary(aes(y = value,group=1), fun.y=mean, colour="red", geom="line",group=1)
+
facet_wrap(~plot, scales = "free_x") +
labs(x = "Treatment", y = "Value", color = "Taxa") +
guides(x = guide_axis(angle = 90))+
theme_bw())
谢谢你:)
但是根据治疗类型(1-10),我应该有 10 条线,而不是一条平均线
我考虑过计算每种治疗类型的平均值并将其添加到绘图代码中,但不知道如何添加它:
mean_1=df_3 %>%
group_by(treatment) %>%
summarise(across(everything(), mean))
【问题讨论】:
-
您可以尝试计算图外的平均值并将其添加到数据中。然后你可以按照上面的答案here 做一个hline per facet
-
@Jonny Phelps 添加了按治疗类型计算方法的代码,但我不明白如何从您的链接将其添加到绘图中
标签: r ggplot2 group-by grouping geom-point