Como adicionar um número de observações por grupo e usar média de grupo no boxplot ggplot2?

Eu estou fazendo um boxplot básico onde y=age e x=Patient groups

 age <- ggplot(data, aes(factor(group2), age)) + ylim(15, 80) age + geom_boxplot(fill = "grey80", colour = "#3366FF") 

Eu estava esperando que você pudesse me ajudar com algumas coisas:

1) É possível include um número de observações por grupo acima de cada boxplot de grupo (mas NÃO no eixo X onde estão as minhas labels de grupo) sem ter que fazer isso em paint :)? Eu tentei usar:

 age + annotate("text", x = "CON", y = 60, label = "25") 

onde CON é o 1º grupo e y = 60 é ~ logo acima do boxplot deste grupo. No entanto, o comando não funcionou. Eu suponho que tem algo a ver que lê x como uma variável contínua em vez de uma variável categórica.

2) Além disso, embora haja muitas questões sobre o uso da média em vez da mediana para os boxplots, eu ainda não encontrei um código que funciona para mim?

3) Sobre o mesmo assunto, existe uma maneira de include o stat médio do grupo no boxplot? Talvez usando

 age + stat_summary(fun.y=mean, colour="red", geom="point") 

que no entanto inclui apenas um ponto onde a média está. Ou novamente usando

 age + annotate("text", x = "CON", y = 30, label = "30") 

onde CON é o 1º grupo e y = 30 é ~ a média de idade do grupo. Sabendo o quão flexível e rica é a syntax do ggplot2 eu esperava que houvesse uma maneira mais elegante de usar a saída de statistics reais em vez de annotate .

Quaisquer sugestões / links seriam muito apreciados!

Obrigado!!

Isso é algo parecido com o que você está procurando? Com stat_summary , conforme solicitado:

 # 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") 

Número preto é o número de observações, o número vermelho é o valor médio. A resposta de joran mostra como colocar os números no topo das checkboxs insira a descrição da imagem aqui

dica do chapéu: https://stackoverflow.com/a/3483657/1036500

Eu acho que isso é o que você está procurando, talvez?

 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) 

insira a descrição da imagem aqui

Eu acabei de perceber que usei erroneamente a mediana quando você estava perguntando sobre a média, mas você pode obviamente usar qualquer function para a estética do middle você quiser.

Responda ao primeiro problema. Para mostrar o valor acima da checkbox, você deve fornecer valores x como numéricos e não como nomes de níveis. Então, para plotar o valor acima do primeiro valor, dê x=1 .

 data(ToothGrowth) ggplot(ToothGrowth,aes(supp,len))+geom_boxplot()+ annotate("text",x=1,y=32,label=30) 
Intereting Posts