2009-09-27 15 views
6

Digamos que tiene el siguiente conjunto de datos:Agregando estadísticas de resumen (o incluso puntos de datos en bruto) a los diagramas de caja de posición esquivado

trt <- ifelse(runif(100)<0.5,"drug","placebo") 
inj.site <- ifelse(runif(100)<0.5,"ankle","wrist") 
relief <- 20 + 0.5*(inj.site=="ankle") + 0.5*(trt=="drug") + rnorm(100) 
to.analyze <- data.frame(trt,inj.site,relief) 

Ahora, la idea es hacer un diagrama de caja con el sitio de la lesión en el eje X y cajas por tratamiento lado a lado:

bplot <- ggplot(to.analyze,aes(inj.site,relief,fill=trt)) + geom_boxplot(position="dodge") 

Bastante fácil. Pero ahora quiero agregar puntos de datos sin procesar en la parte superior de los cuadros. Si no tuviera cajas con position="dodge", esto sería fácil:

bplot + geom_point(aes(colour=trt)) 

Sin embargo, esto se basa en puntos entre las cajas, y añadiendo un position="dodge" a esta geometría no parece funcionar. ¿Cómo ajusto esto para que los puntos se dibujen sobre las casillas?

Bonificación: la misma situación que con el uso de stat_summary(blah,y.fun=mean,shape="+") para sobrerreglar el medio, que tiene el mismo problema.

+0

alivio <- 20 + 0,5 * (inj.site == tobillo) + 0,5 * (trt == "fármaco") + rnorm (100) debería ser: alivio <- 20 + 0,5 * (inj.site == "tobillo") + 0.5 * (trt == "medicamento") + rnorm (100) – Paolo

+0

er, sí, reparado. –

Respuesta

3

Hadley, sin duda, corrígeme si me equivoco aquí ...

Ésta es la sintaxis natural:

bplot + geom_point(aes(colour=trt), position=position_dodge(width=.5)) 

(posición = "esquivar" va a hacer lo mismo, sin el parámetro.)

Cuando lo trazo, obtengo algo que parece un position_jitter(), que es probablemente lo que obtienes también.

Curioso, fui a buscar en la fuente, donde encontré la función pos_dodge(). (Tipo pos_dodge en un símbolo R para verlo ...) Aquí está el final de la misma:

within(df, { 
    xmin <- xmin + width/n * (seq_len(n) - 1) - diff * (n - 1)/(2 * n) 
    xmax <- xmin + d_width/n 
    x <- (xmin + xmax)/2 
}) 

n es el número de filas de la trama de datos. ¡Así que parece que está eludiendo los puntos individuales por una fracción indexada por la fila! Entonces, el primer punto es el ancho/n esquivado, el segundo es esquivado 2 * ancho/n, y el último es esquivado n * ancho/n.

Esto obviamente no es lo que quería decir , aunque es lo que ha dicho . Puede que esté atascado recreando el diagrama de caja esquivado manualmente, o usando una visualización diferente, como faceting quizás?

ggplot(to.analyze,aes(inj.site,relief)) + geom_boxplot() + facet_wrap(~ trt) 
+0

En facetas, funciona perfectamente. Sin embargo, para visualizar las razones, preferiría haber evitado la posición, aunque podría tratar de identificarme con inj.site? –

Cuestiones relacionadas