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)
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.
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 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)))
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)
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:
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.