Boxplot montre la valeur de la moyenne

Dans cette boîte à moustaches, nous pouvons voir la moyenne, mais comment pouvons-nous avoir la valeur numérique sur le tracé pour chaque moyenne de chaque boîte à moustaches?

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) 

Tout d’abord, vous pouvez calculer la aggregate du groupe avec l’ aggregate :

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

Cet dataset 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.

entrer la description de l'image ici


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) 

entrer la description de l'image ici

Vous pouvez utiliser la valeur de sortie de 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))) 

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 bloc de données supplémentaire:

 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) 

entrer la description de l'image ici

La voie Magrittr

Je sais qu’il y a déjà une réponse acceptée, mais je voulais montrer un moyen génial de le faire en commande unique avec l’aide du paquet magrittr .

 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 une boîte à moustaches avec des moyens imprimés en tant que points et valeurs: boxplot avec des moyens

Je divise la commande sur plusieurs lignes afin que je puisse commenter ce que chaque partie fait, mais elle peut aussi être entrée en tant que sous-titre. Vous pouvez en apprendre plus à ce sujet dans mon esprit .