Je fais un boxplot de base où y=age
et x=Patient groups
age <- ggplot(data, aes(factor(group2), age)) + ylim(15, 80)
age + geom_boxplot(fill = "grey80", colour = "#3366FF")
J'espérais que vous pourriez m'aider avec quelques choses:
1) Est-il possible d'inclure un certain nombre d'observations par groupe au-dessus de chaque boîte à moustaches de groupe (mais PAS sur l'axe X où se trouvent les étiquettes de mon groupe) sans avoir à le faire dans Paint :)? J'ai essayé d'utiliser:
age + annotate("text", x = "CON", y = 60, label = "25")
où CON
est le 1er groupe et y = 60
est ~ juste au-dessus du boxplot pour ce groupe. Cependant, la commande n'a pas fonctionné. Je suppose qu'il a quelque chose à faire qu'il lit x
comme une variable continue plutôt que catégorique.
2) Aussi, bien qu'il y ait beaucoup de questions sur l'utilisation de la moyenne plutôt que de la médiane pour les boxplots, je n'ai toujours pas trouvé de code qui fonctionne pour moi?
3) Sur le même sujet, existe-t-il un moyen d'inclure la statistique de groupe moyen dans le boxplot? Peut-être en utilisant
age + stat_summary(fun.y=mean, colour="red", geom="point")
qui ne comprend cependant qu'un point d'où se situe la moyenne. Ou encore en utilisant
age + annotate("text", x = "CON", y = 30, label = "30")
où CON
est le 1er groupe et y = 30
est ~ la moyenne d'âge du groupe. Savoir combien flexible et riche ggplot2
la syntaxe est que j'espérais qu'il existe une manière plus élégante d'utiliser la sortie réelle des statistiques plutôt que annotate
.
Toutes suggestions/liens seraient très appréciés!
Merci!!
Est-ce quelque chose comme ce que vous recherchez? Avec stat_summary
, comme demandé:
# function for number of observations
give.n <- function(x){
return(c(y = median(x)*1.05, label = length(x)))
# experiment with the multiplier to find the perfect position
}
# function for mean labels
mean.n <- function(x){
return(c(y = median(x)*0.97, label = round(mean(x),2)))
# experiment with the multiplier to find the perfect position
}
# plot
ggplot(mtcars, aes(factor(cyl), mpg, label=rownames(mtcars))) +
geom_boxplot(fill = "grey80", colour = "#3366FF") +
stat_summary(fun.data = give.n, geom = "text", fun.y = median) +
stat_summary(fun.data = mean.n, geom = "text", fun.y = mean, colour = "red")
Le nombre noir est le nombre d'observations, le nombre rouge est la valeur moyenne. la réponse de joran vous montre comment mettre les chiffres en haut des cases
pointe du chapeau: https://stackoverflow.com/a/3483657/10365
Je pense que c'est ce que vous cherchez peut-être?
myboxplot <- ddply(mtcars,
.(cyl),
summarise,
min = min(mpg),
q1 = quantile(mpg,0.25),
med = median(mpg),
q3 = quantile(mpg,0.75),
max= max(mpg),
lab = length(cyl))
ggplot(myboxplot, aes(x = factor(cyl))) +
geom_boxplot(aes(lower = q1, upper = q3, middle = med, ymin = min, ymax = max), stat = "identity") +
geom_text(aes(y = max,label = lab),vjust = 0)
Je viens de réaliser que j'ai utilisé par erreur la médiane lorsque vous avez demandé la moyenne, mais vous pouvez évidemment utiliser n'importe quelle fonction pour l'esthétique middle
qui vous plaît.
Réponse au premier problème. Pour afficher la valeur au-dessus de la boîte, vous devez fournir des valeurs x
sous forme numérique et non sous forme de noms de niveau. Donc, pour tracer la valeur au-dessus de la première valeur, donnez x=1
.
data(ToothGrowth)
ggplot(ToothGrowth,aes(supp,len))+geom_boxplot()+
annotate("text",x=1,y=32,label=30)