2012-05-24 28 views
7

Estoy tratando de tener escalas libres en una imagen de Boxplot con facetas.ggplot2: diagrama de caja con facet_grid y escala libre

Utilizando este ejemplo conjunto de datos, si intento esto:

ggplot(data=mpg) + 
geom_boxplot(aes(x=cty, y=model))+ 
facet_grid(manufacturer ~ drv, scales = "free", space = "free") 

Plot incorrect boxplot http://dl.dropbox.com/u/9788680/plot1.png

Aquí, las escalas libres se implementa exactamente como me gustaría, con las diferentes escalas para el eje y en función de la cantidad de factores disponibles para una regla de faceta horizontal. Sin embargo, los diagramas de caja no se representan correctamente (es decir, como líneas continuas en lugar de diagramas de caja). Durante la búsqueda de una solución, he encontrado que debo utilizar coord_flip() con el fin de hacer que el diagrama de caja puede representar correctamente, es decir

ggplot(data=mpg) + 
geom_boxplot(aes(x=model,y=cty))+ 
facet_grid(manufacturer ~ drv, scales = "free", space = "free")+ 
coord_flip() 

Plot correct boxplot, but no scaling http://dl.dropbox.com/u/9788680/plot2.png

En la imagen anterior, los diagramas de caja ahora son correctos. Sin embargo, la escala libre para los factores (por lo tanto, en el eje y) se elimina. Ahora, para cada línea de faceta horizontal, TODOS los factores disponibles a través del conjunto de datos ahora están incluidos, en lugar de solo los factores disponibles para cada faceta (como en la Figura 1).

Me gustaría saber cómo puedo obtener el facetado correcto con una escala libre en ambos ejes, representando correctamente el diagrama de caja.

Si alguien pudiera señalarme en la dirección correcta, le estaría agradecido.

Gracias.

+0

me di cuenta el mismo problema al responder [http://stackoverflow.com/a/10729264/1385941](http://stackoverflow.com/a/10729264/1385941). Mi suposición es porque 'coord_flip()' llama 'coord_cartesian' no' scale_continuous'. 'scale_' y' coord_' afectan la trama de manera diferente. Podría valer la pena informar esto como un 'problema' en [https://github.com/hadley/ggplot2](https://github.com/hadley/ggplot2) – mnel

+0

Gracias por este comentario. Con suerte, alguien puede proporcionar una solución alternativa. Si no se publican otros comentarios, informaré sobre este problema según lo sugerido. Quizás un análogo a geom_errorbarh podría escribirse también para las diagramas de caja. – coenvh

+0

No hay una solución alternativa; los diagramas de caja son solo verticales (la variable continua es y) y solo se pueden voltear con 'coord_flip()', pero eso arruina las escalas de facetado, como puede ver. Consulte https://groups.google.com/d/msg/ggplot2/u5a1mpnJR7E/XxwXWNDX77MJ –

Respuesta

0

me di cuenta ayer de forma independiente que bxoplots horizontal muestra como líneas - No estoy seguro todavía si se trata de un error, o una función, o que se ca cambiarse

en su caso, lo hice

library(ggplot2) 
ggplot(data=mpg) + 
    geom_boxplot(aes(y=cty, x=model,fill=model))+ 
    facet_grid(manufacturer~drv, scales = "free", space = "free")+theme(axis.text.x=element_text(angle=90),legend.position="none") 

exactamente a la inversa X e y, y también las facetas = llamada _grid, añade un poco de color y girar las etiquetas x - Creo que esto es lo que desea simplemente volteado

+0

Probé su ejemplo, pero en este caso, ¡estos son * gráficos de caja * verticales! Esta no es la trama que quería generar.Intentaba obtener diagramas de caja horizontales, no verticales. Así que básicamente el primer ejemplo en mi publicación pero luego obtengo los diagramas de caja reales, no estas líneas ... – coenvh

+0

Se ha explicado que ggplot no hace gráficos de cajas horizontales, te estaba mostrando cómo puedes crear una versión muy similar acaba de voltear – user1617979

+1

Sí, a partir de comentarios anteriores, esta aparente limitación de ggplot quedó clara. Sin embargo, mi pregunta era sobre los diagramas de caja verticales ... por lo que su sugerencia, aunque apreciada, realmente no resuelve mi problema :) – coenvh

1

el comportamiento deseado que sea compatible al menos a partir del ggplot2 2.2 .1.


library(ggplot2) 
ggplot(data=mpg[which(mpg$manufacturer %in% c('audi', 'hyundai', 'jeep')),]) + 
    geom_boxplot(aes(x=model,y=cty)) + 
    facet_grid(manufacturer ~ drv, scales = "free", space = "free") + 
    coord_flip() 

sessionInfo() 
#> R version 3.3.2 (2016-10-31) 
#> Platform: x86_64-apple-darwin13.4.0 (64-bit) 
#> Running under: OS X El Capitan 10.11.6 
#> 
#> locale: 
#> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 
#> 
#> attached base packages: 
#> [1] stats  graphics grDevices utils  datasets methods base  
#> 
#> other attached packages: 
#> [1] ggplot2_2.2.1 
#> 
#> loaded via a namespace (and not attached): 
#> [1] Rcpp_0.12.11   digest_0.6.12  rprojroot_1.2  
#> [4] plyr_1.8.4   grid_3.3.2   gtable_0.2.0   
#> [7] backports_1.0.5  magrittr_1.5   evaluate_0.10.1  
#> [10] scales_0.4.1.9002 rlang_0.1.1.9000  stringi_1.1.5  
#> [13] reshape2_1.4.2  lazyeval_0.2.0  rmarkdown_1.6.0.9001 
#> [16] labeling_0.3   tools_3.3.2   stringr_1.2.0  
#> [19] munsell_0.4.3  yaml_2.1.14   colorspace_1.3-2  
#> [22] htmltools_0.3.6  knitr_1.16   tibble_1.3.3 
Cuestiones relacionadas