Добавьте стандартную ошибку как заштрихованную область вместо панелей ошибок в geom_boxplot - PullRequest
2 голосов
/ 26 сентября 2019

У меня есть boxplot, и я добавил среднее значение с stat_summary в виде линии на графике.Я хочу добавить стандартную ошибку , но я не хочу errorbar .

По сути, я хочу добавить стандартную ошибку как затененная область , как вы можете сделать, используя geom_ribbon.

Я использовал набор данных PlantGrowth, чтобы кратко показать вам, что я пробовал.

library(ggplot2) 

ggplot(PlantGrowth, aes(group, weight))+ 
stat_boxplot( geom='errorbar', linetype=1, width=0.5)+ 
geom_boxplot(fill="yellow4",colour="black",outlier.shape=NA) + 
stat_summary(fun.y=mean, colour="black", geom="line", shape=18, size=1,aes(group=1))+ 
stat_summary(fun.data = mean_se, geom = "errorbar")

Я сделал это, используя geom_errorbar в stat_summary, и попытался заменить geom_errorbar на geom_ribbon, как я видел в некоторых других примерах в Интернете, но это не работает.

Что-то вродена этот раз, но с ошибкой в ​​виде заштрихованной области вместо полос ошибок (что делает его немного запутанным, чтобы увидеть)

enter image description here

1 Ответ

1 голос
/ 27 сентября 2019

Слои так много 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)

Исходя из ваших комментариев, что вы хотите ленту, вы можете вместо этогоиспользуйте ленту с group = 1 так же, как для линии.

gg +
  stat_summary(aes(group = 1), fun.data = mean_se, geom = "ribbon", 
               fill = "pink", alpha = 0.6)

Лента не имеет большого смысла для дискретной переменной, но вотПример с некоторыми фиктивными данными для непрерывной группы, где эта установка становится более разумной (хотя ИМО все еще трудно читать).

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)

...