добавить количество наблюдений к нескольким боксплотам ggplot2 - PullRequest
1 голос
/ 04 мая 2020

Я пытаюсь создать боксы с описательной информацией (среднее, количество и т. Д. c.). Я нашел много примеров того, как добавить числа для одного бокса с разными группами, но я не нашел способа добавить эти числа для сетки из нескольких боксов (facet_wrap).

например, эта статья описывает, как добавить числа для одного боксплота - я пытаюсь сделать то же самое для нескольких боксов

library(reshape2)
library(ggplot2)
df.m <- melt(iris, id.var = "Species")
p <- ggplot(data = df.m, aes(x=variable, y=value)) + 
  geom_boxplot(aes(fill=Species))
p + facet_wrap( ~ variable, scales="free")

enter image description here

и в верхней части этого графика - я хочу добавить соответствующую описательную информацию в верхней части каждого поля.

1 Ответ

2 голосов
/ 04 мая 2020

Создайте функцию, которая делает подсчет и означает

stat_box_data <- function(y) {
  return( 
    data.frame(
      y = 0.5+1.1*max(y),  #may need to modify this depending on your data
      label = paste('count =', length(y), '\n',
                    'mean =', round(mean(y), 1), '\n')
    )
  )
}

  )
}
df.m <- melt(iris, id.var = "Species")

Вы можете использовать это или что-то подобное, если у вас есть большие выбросы вместо бита y=0.5... выше:

y=quantile(y,probs=0.95)*1.1,

Нанесите на график данные и используйте stat_summary со своей пользовательской функцией

ggplot(data = df.m, aes(x=Species, y=value)) + 
  geom_boxplot(aes(fill=Species))+
  stat_summary(
    fun.data = stat_box_data, 
    geom = "text", 
    hjust = 0.5,
    vjust = 0.9
  ) + 
facet_wrap( ~ variable, scales="free")

enter image description here

...