Вы можете начать с простого tidyverse
library(tidyverse)
d %>%
group_by(scenario, decade) %>%
summarise_at(vars(FutureRangeSize.FullDisp), funs(Mean=mean, Sd=sd)) %>%
mutate(Sd=ifelse(is.na(Sd),0,Sd)) %>%
ggplot(aes(x=decade, y=Mean, color=scenario, fill=scenario)) +
geom_point() +
geom_ribbon(aes(ymin = Mean - Sd, ymax= Mean + Sd), alpha=0.2)
Или попробуйте stat_summary
подход, как описано здесь
ggplot(d, aes(x=decade,y=FutureRangeSize.FullDisp, color=scenario)) +
geom_point() +
stat_summary(fun.data = 'mean_sdl', geom = 'smooth', alpha=0.2)