Dans cette boîte à moustaches, nous pouvons voir la moyenne, mais comment pouvons-nous aussi avoir la valeur numérique sur la parcelle pour chaque moyenne de chaque parcelle?
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 les moyennes de groupe avec 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.
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)
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 trame 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)
Je sais qu’il existe déjà une réponse acceptée, mais je voulais montrer une façon simple de le faire en une seule commande à l’aide de magrittr package.
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 sous forme de points et de valeurs:
Je divise la commande sur plusieurs lignes pour pouvoir commenter le rôle de chaque partie, mais elle peut également être entrée en tant que doublure. Vous pouvez en apprendre plus à ce sujet dans mon Gist .