我想在应用facet_wrap
时添加4个类别(
2年* 2次治疗)的平均值(文本或垂直线)。我已经尝试过
group_by
,但它只能适用于 2 个类别(年份或治疗)。是否可以对Year和Treatment进行平均值?
原始数据如下:
structure(list(Year = c(2021, 2021, 2021, 2021, 2021, 2021, 2021,
2021, 2021, 2021, 2021, 2021, 2017, 2017, 2017, 2017, 2017, 2017,
2017, 2017, 2017, 2017, 2017, 2017), Pos_heliaphen = c("W13",
"W44", "X23", "Y42", "Z07", "Z36", "W45", "X22", "X30", "Y43",
"Z06", "Z37", "Y36", "Z06", "Z18", "Z24", "Z40", "Z43", "Y35",
"Z05", "Z17", "Z23", "Z39", "Z44"), Treatment = c("Non-irrigated",
"Non-irrigated", "Non-irrigated", "Non-irrigated", "Non-irrigated",
"Non-irrigated", "Irrigated", "Irrigated", "Irrigated", "Irrigated",
"Irrigated", "Irrigated", "Non-irrigated", "Non-irrigated", "Non-irrigated",
"Non-irrigated", "Non-irrigated", "Non-irrigated", "Irrigated",
"Irrigated", "Irrigated", "Irrigated", "Irrigated", "Irrigated"
), Variety = c("ES Pallador - MG I", "ES Pallador - MG I", "ES Pallador - MG I",
"Sultana - MG 000", "Sultana - MG 000", "Sultana - MG 000", "ES Pallador - MG I",
"ES Pallador - MG I", "ES Pallador - MG I", "Sultana - MG 000",
"Sultana - MG 000", "Sultana - MG 000", "ES Pallador - MG I",
"ES Pallador - MG I", "ES Pallador - MG I", "Sultana - MG 000",
"Sultana - MG 000", "Sultana - MG 000", "ES Pallador - MG I",
"ES Pallador - MG I", "ES Pallador - MG I", "Sultana - MG 000",
"Sultana - MG 000", "Sultana - MG 000"), SLA = c(127.105797101449,
135.263238679969, 135.57233201581, 120.477777777778, 149.139664804469,
139.5776, 142.927987742594, 139.450256889304, 152.589150943396,
102.962703962704, 114.160714285714, 106.182042833608, 29.168895183201,
61.5906086966241, 14.65223598377, 73.8218290951699, 29.0006487652397,
37.6144729444593, 103.550713082565, 118.558911914481, 116.11947891962,
91.7471974108231, 78.2428634817335, 91.5116772823779)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -24L))
这是我的代码:
library(ggplot2)
library(dplyr)
df %>%
mutate(across(Variety, factor, levels=c("Sultana - MG 000","ES Pallador - MG I","Isidor - MG I",
"Santana - MG I/II","Blancas - MG II","Ecudor - MG II")))%>%
ggplot(aes(y=Treatment,x=SLA,group=Year))+
geom_point(aes(color = as.factor(Year),shape=Treatment),size=3,alpha = 0.7)+
labs(x = expression(paste('SLA (cm'^2,'·','g'^-1,')')),
y = "Treatment")+
scale_color_manual(values = c("#FF6600","#336699"))+
scale_shape_manual(values = c(16,1))+
theme_bw() +
theme(axis.text.x = element_text(size=13,vjust=0.5),
axis.text.y = element_text(size=13),
axis.title.x = element_text(size = 14),
axis.title.y = element_text(size = 14),
legend.title=element_text(size=14),
legend.text=element_text(size=12),
legend.position = "bottom" )+
guides(color = guide_legend(title = "Year"),shape = guide_legend(title = "Treatment"))+
facet_wrap(~Variety)
申请时如何填写每个品种这4个方框的平均值
facet_wrap
?
一种选择是使用
stat_summary
来计算平均值,并使用一个或两个 ifelse
有条件地定位两年的标签:
library(ggplot2)
library(dplyr)
df %>%
mutate(across(Variety, factor, levels = c(
"Sultana - MG 000", "ES Pallador - MG I", "Isidor - MG I",
"Santana - MG I/II", "Blancas - MG II", "Ecudor - MG II"
))) %>%
ggplot(aes(y = Treatment, x = SLA, group = Year)) +
geom_point(aes(color = as.factor(Year), shape = Treatment), size = 3, alpha = 0.7) +
stat_summary(
geom = "label",
fun = mean, orientation = "y",
aes(
y = as.numeric(factor(Treatment)) + .1 * if_else(Year == 2021, -1, 1),
vjust = if_else(Year == 2021, 1, 0),
label = after_stat(round(x, 1)),
color = as.factor(Year)
),
fill = NA
) +
labs(
x = expression(paste("SLA (cm"^2, "·", "g"^-1, ")")),
y = "Treatment"
) +
scale_color_manual(values = c("#FF6600", "#336699")) +
scale_shape_manual(values = c(16, 1)) +
theme_bw() +
theme(
axis.text.x = element_text(size = 13, vjust = 0.5),
axis.text.y = element_text(size = 13),
axis.title.x = element_text(size = 14),
axis.title.y = element_text(size = 14),
legend.title = element_text(size = 14),
legend.text = element_text(size = 12),
legend.position = "bottom"
) +
guides(
color = guide_legend(title = "Year"),
shape = guide_legend(title = "Treatment")) +
facet_wrap(~Variety)