Boxplot montrer la valeur de moyenne

dans ce boxplot nous pouvons voir la moyenne mais comment pouvons-nous avoir aussi la valeur numérique sur la parcelle pour chaque moyen de chaque parcelle de la boîte?

 ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot() +
     stat_summary(fun.y=mean, colour="darkred", geom="point", 
                           shape=18, size=3,show_guide = FALSE)
45
demandé sur Sven Hohenstein 2013-11-09 17:28:01

4 réponses

tout d'Abord, vous pouvez calculer le groupe aggregate:

means <- aggregate(weight ~  group, PlantGrowth, mean)

cet ensemble de données peut être utilisé avec geom_text:

library(ggplot2)
ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot() +
  stat_summary(fun.y=mean, colour="darkred", geom="point", 
               shape=18, size=3,show_guide = FALSE) + 
  geom_text(data = means, aes(label = weight, y = weight + 0.08))

Ici + 0.08 est utilisé pour placer l'étiquette au-dessus du point représentant la moyenne.

enter image description here


une version alternative sans ggplot2:

means <- aggregate(weight ~  group, PlantGrowth, mean)

boxplot(weight ~ group, PlantGrowth)
points(1:3, means$weight, col = "red")
text(1:3, means$weight + 0.08, labels = means$weight)

enter image description here

60
répondu Sven Hohenstein 2015-10-26 18:50:05

Vous pouvez utiliser la valeur de la production stat_summary()

ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group)) 
+ geom_boxplot() 
+ stat_summary(fun.y=mean, colour="darkred", geom="point", hape=18, size=3,show_guide = FALSE)
+ stat_summary(fun.y=mean, colour="red", geom="text", show_guide = FALSE, 
               vjust=-0.7, aes( label=round(..y.., digits=1)))
18
répondu user3749036 2014-12-16 18:07:44

Vous pouvez également utiliser une fonction dans stat_summary pour calculer la moyenne et l'argument hjust pour placer le texte, vous avez besoin d'une fonction supplémentaire mais pas de données supplémentaires frame:

fun_mean <- function(x){
  return(data.frame(y=mean(x),label=mean(x,na.rm=T)))}


ggplot(PlantGrowth,aes(x=group,y=weight)) +
geom_boxplot(aes(fill=group)) +
stat_summary(fun.y = mean, geom="point",colour="darkred", size=3) +
stat_summary(fun.data = fun_mean, geom="text", vjust=-0.7)

enter image description here

10
répondu mvogel 2013-11-11 10:30:49

Le Magrittr

je sais qu'il est accepté de répondre déjà, mais je voulais montrer une façon cool de le faire dans une seule commande à l'aide de magrittr paquet.

PlantGrowth %$% # open dataset and make colnames accessible with '$'
split(weight,group) %T>% # split by group and side-pipe it into boxplot
boxplot %>% # plot
lapply(mean) %>% # data from split can still be used thanks to side-pipe '%T>%'
unlist %T>% # convert to atomic and side-pipe it to points
points(pch=18)  %>% # add points for means to the boxplot
text(x=.+0.06,labels=.) # use the values to print text

ce code produira un boxplot avec des moyens imprimés en points et valeurs: boxplot with means

j'ai divisé la commande en plusieurs lignes pour pouvoir commenter ce que chaque partie fait, mais elle peut aussi être entrée comme oneliner. Vous pouvez en apprendre plus sur dans mon gist.

0
répondu jena 2018-06-19 10:59:43