Как наложить два ggplots с помощью stat_summary (), но с разными свойствами геометрии

#r #ggplot2

#r #ggplot2

Вопрос:

Я строю линейный график с доверительным интервалом 95, однако я бы хотел, чтобы диапазон 95CI для одного условия можно было визуализировать как ленту, а не панель ошибок, чтобы показать диапазон верхних и нижних границ.

Приведенный ниже код показывает линейный график с 95CI.

 df1<-structure(list(subject = c("S11", "S11", "S11", "S11", "S11", 
"S12", "S12", "S12", "S12", "S12", "S12"), condition = c("placebo", 
"placebo", "placebo", "placebo", "placebo", "Drug1", "Drug1", 
"Drug1", "Drug1", "Drug1", "Drug1"), Day = c(1, 2, 3, 4, 5, 1, 
2, 3, 4, 5, 6), Effect = c(-0.053, 0.02831, 
0.056, 0.450, 0.29, 0.011, 
-0.039, -0.01293, 0.042, 
-0.01568, 0.080)), row.names = c(NA, 
-11L), class = c("tbl_df", "tbl", "data.frame"))

ggplot(df1,
             aes(x=Day,y=Effect,color= condition ,fill= condition))  
  stat_summary(fun.y="mean", geom="line",size=1.5,alpha=1) 
  stat_summary(fun.y ='mean',geom ="point", size = 1,alpha=0.8,show.legend = FALSE) 
  #geom_ribbon(aes(ymin=min.Uv, ymax=max.Uv), alpha=0.7,fill='yellow', colour=NA) 
  stat_summary(fun.data = mean_cl_normal, geom = "errorbar", fun.args = list(mult = 1),size=1)


  

Строка, которая была прокомментирована выше ( geom_ribbon(aes(ymin=min.Uv, ymax=max.Uv) ), используется в качестве визуализации 95CI другого условия.
Мне интересно, есть ли более эффективный способ сделать это, поскольку функция fun.data = mean_cl_normal делает то же самое.
Итак, я реализую fig1 другой рисунок, который разделяет похожую грамматику построения, но отличается по gemo='smooth' . Главный вопрос, можно ли заменить ( geom_ribbon(aes(ymin=min.Uv, ymax=max.Uv) ), добавив другой график с gemo='smooth' , чтобы показать диапазон 95CI?

 df2<-structure(list(subject = c("S02", "S02", "S02", "S02", "S02"), 
    condition = c("Drug2", "Drug2", "Drug2", "Drug2", "Drug2"
    ), Day = c(1, 2, 3, 4, 5), Effect = c(1.6592, 1.8384, 
    1.809, 1.807, 1.651)), row.names = c(NA, 
-5L), class = c("tbl_df", "tbl", "data.frame"))

fig1 stat_summary(data=df2,aes(x=Day,y=Effect),
                  fun.data ="mean_cl_normal", geom = "smooth", , fun.args = list(mult = 1))
  

Я получил наложенную линейную диаграмму, но отсутствует лента / сглаживание. Любой комментарий очень ценится!

Комментарии:

1. Моя рекомендация заключалась бы в том, чтобы вычислить все необходимые данные за пределами ggplot, а затем использовать их только для построения графика.