Слои так много geoms становится трудно читать, но вот упрощенная версия с несколькими опциями.Помимо небольшого разбора, чтобы увидеть, что я редактировал, я добавил плитку в качестве краткого описания;плитка похожа на прямоугольную, за исключением того, что предполагается, что она будет отцентрирована относительно любого значения x, поэтому вам не нужно беспокоиться о размещении по оси x, которое требуется geom_rect
.Вы можете поэкспериментировать с цветом заливки и непрозрачностью - я сделал белые прямоугольники, чтобы лучше проиллюстрировать.
library(ggplot2)
gg <- ggplot(PlantGrowth, aes(x = group, y = weight)) +
stat_boxplot(geom = "errorbar", width = 0.5) +
geom_boxplot(fill = "white", outlier.shape = NA, width = 0.7) +
stat_summary(aes(group = 1), fun.y = mean, geom = "line")
gg +
stat_summary(fun.data = mean_se, geom = "tile", width = 0.7,
fill = "pink", alpha = 0.6)
![](https://i.imgur.com/OrpKuKO.png)
Исходя из ваших комментариев, что вы хотите ленту, вы можете вместо этогоиспользуйте ленту с group = 1
так же, как для линии.
gg +
stat_summary(aes(group = 1), fun.data = mean_se, geom = "ribbon",
fill = "pink", alpha = 0.6)
![](https://i.imgur.com/NA2buvH.png)
Лента не имеет большого смысла для дискретной переменной, но вотПример с некоторыми фиктивными данными для непрерывной группы, где эта установка становится более разумной (хотя ИМО все еще трудно читать).
pg2 <- PlantGrowth
set.seed(123)
pg2$cont_group <- floor(runif(nrow(pg2), 1, 6))
ggplot(pg2, aes(x = cont_group, y = weight, group = cont_group)) +
stat_boxplot(geom = "errorbar", width = 0.5) +
geom_boxplot(fill = "white", outlier.shape = NA, width = 0.7) +
stat_summary(aes(group = 1), fun.y = mean, geom = "line") +
stat_summary(aes(group = 1), fun.data = mean_se, geom = "ribbon",
fill = "pink", alpha = 0.6)
![](https://i.imgur.com/UlwC4ht.png)