varias superponer studio hacer graficos graficas ggplot example como avanzados r ggplot2 boxplot

superponer - ¿Cómo agregar un número de observaciones por grupo y usar la media de grupo en ggplot2 boxplot?



superponer graficas en r ggplot (3)

Estoy haciendo una gráfica de caja básica donde y=age y x=Patient groups

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

Esperaba que pudieras ayudarme con algunas cosas:

1) ¿Es posible incluir un número de observaciones por grupo sobre cada diagrama de caja de grupo (pero NO en el eje X donde están las etiquetas de mi grupo) sin tener que hacer esto en Paint :)? He intentado usar:

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

donde CON es el 1er grupo e y = 60 está ~ justo arriba del diagrama de caja para este grupo. Sin embargo, el comando no funcionó. Supongo que tiene algo que ver que lee x como una variable continua en lugar de una variable categórica.

2) Además, aunque hay muchas preguntas sobre el uso de la media en lugar de la mediana para los diagramas de caja, ¿aún no he encontrado un código que funcione para mí?

3) En el mismo asunto, ¿hay alguna manera de incluir la estadística del grupo promedio en el diagrama de caja? Tal vez usando

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

el cual, sin embargo, solo incluye un punto donde está la media. O de nuevo usando

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

donde CON es el primer grupo e y = 30 es ~ la media de edad del grupo. Sabiendo cuán flexible y rica es la sintaxis de ggplot2 esperaba que hubiera una forma más elegante de usar la salida de estadísticas reales en lugar de annotate .

Cualquier sugerencia / enlace sería muy apreciado!

¡¡Gracias!!


¿Es esto algo como lo que buscas? Con stat_summary , según lo 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")

El número negro es el número de observaciones, el número rojo es el valor medio. La respuesta de Joran te muestra cómo poner los números en la parte superior de las cajas.

hat-tip: https://.com/a/3483657/1036500


Creo que esto es lo que buscas tal vez?

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)

Me di cuenta de que usé erróneamente la mediana cuando preguntaba sobre la media, pero obviamente puede usar cualquier función para la estética middle quiera.


Responde al primer problema. Para mostrar el valor sobre el cuadro, debe proporcionar los valores de x como numéricos, no como nombres de nivel. Entonces, para graficar el valor sobre el primer valor, dé x=1 .

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