Ваши данные:
Data1 = structure(list(Treatment = structure(c(1L, 1L, 2L, 2L, 3L, 3L,
4L, 4L, 5L, 5L), .Label = c("N1", "N2", "N3", "N4", "N5"), class = "factor"),
Rep = c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), X = c(10.18,
13.53, 15.34, 10.4, 8.57, 13.95, 16.69, 14.33, NA, 15.74),
Y = c(14.38, 14.38, 18.28, 7.14, 22.57, 19.9, NA, 9.32, NA,
15.39)), class = "data.frame", row.names = c(NA, -10L))
Определите функцию для вычисления sem:
SE = function(x){
x=x[!is.na(x)]
sd(x)/sqrt(length(x))
}
Загрузите библиотеки и поверните таблицу на более длинный срок, затем вычислите среднее значение и sem для каждого ответа в каждой обработке :
library(dplyr)
library(tidyr)
df<-Data1 %>%
pivot_longer(-c(Treatment,Rep)) %>%
group_by(Treatment,name) %>%
summarize(mean=mean(value,na.rm=TRUE),SE=SE(value))
Когда вы делаете group_by
, переменные группировки не включаются в суммирование, поэтому вам не нужно summarise_at
. Также вы не можете включить Rep в группировку, потому что это сделает группировку наблюдением, что неправильно.
Теперь мы строим сюжет:
p<- ggplot(df,aes(x=Treatment,y=mean,colour=name))+
geom_line(aes(group=name)) +
geom_errorbar(aes(ymin = mean-SE, ymax = mean+SE),
width = 0.25) +
scale_y_continuous(expand = c(0,0), limits = c(0, 40)) +
theme_classic() + theme(axis.text.x = element_text(size= 5.5,
angle = 45, hjust = 1, colour = "black",face = "bold")) +
theme(axis.text.y = element_text(size= 8, hjust = 1,
colour = "black",face = "bold"))
Надеюсь, это то, что вы хотите .. Если нет, уточните подробнее ваш вопрос.
![enter image description here](https://i.stack.imgur.com/spNGf.png)