2012-05-14 19 views
5

Me gusta un poco facet_grid ya menudo me encuentro usándolo con geom_histogram. También me gusta el argumento margins=foo, ya que puede ver todas las distribuciones en comparación con los grupos agregados. El problema es que cuando se incluye un argumento de margen, se extienden todos los grupos para cumplir con el rango de escala usualmente más amplio para los márgenes ya que ahora se tienen todos los datos. Esto significa que toda la escala de grupos agregados es mucho más amplia y es más difícil detectar las diferencias entre los grupos. Así que me digo a mí mismo: puede resolver esto con el argumento de las escalas y permitir que varíe ". El problema con esta solución es que ahora es difícil comparar grupos agregados porque todos tienen escalas diferentes. Lo que me gustaría es con los márgenes están libres pero todo lo demás constreñidos como si a pesar de las escalas no son libres. ¿es esto posible?ggplot2 libre los márgenes constriñen el resto

presento código aquí y fotos para demostrar lo que quiero decir. Si esto no está claro por favor pregunte.

#create some data 
set.seed(10) 
dat <- data.frame(var1=rpois(1000, 20), 
    var2=as.factor(sample(LETTERS[1:4], 1000, replace=T)), 
    var3=as.factor(sample(month.abb[1:5], 1000, replace=T))) 

ggplot(dat, aes(var1)) + 
geom_histogram() + 
facet_grid(var2~var3) 

Aquí es la trama de eso. me gusta porque puedo comparar fácilmente todas las puntuaciones agregadas ya que sus escalas Y son los mismos. Pero ¿no sería bueno tener los márgenes o el histogra dis-agregados ms también para la comparación.

enter image description here

ggplot(dat, aes(var1)) + 
geom_histogram() + 
facet_grid(var2~var3, margins='var2') 

Muy bien, así que pusimos el argumento margins y ahora podemos comparar, pero todos los histogramas de grupo agregados se estiran a 20 y que hace difícil su comparación (ver imagen de abajo). Ok, establezcamos scales para ser libres entonces.este ejemplo no es horrible como los datos se distribuyen bastante uniformemente int muestreo método que se utiliza, pero en la vida real algunas células sólo tienen unos pocos recuentos y otros tienen los lotes y las comparaciones son aún peores

enter image description here

ggplot(dat, aes(var1)) + 
geom_histogram() + 
facet_grid(var2~var3, margins='var2', scales="free_y") 

Así que aquí está la trama con las escalas gratis. El problema es que también son libres para los puntajes agregados y compararlos es problemático (uno es 14ish, one 8ish, one 7ish).

enter image description here

Entonces, ¿hay una manera de permitir sólo la margins para ser libre? Básicamente lo que quiero es tomar la primera figura creada y empalmar los márgenes desde la segunda figura.

+0

Supongo que no, aunque hay una [solicitud de función] relacionada (https://github.com/hadley/ggplot2/issues/187), y esto me parece más fácil y más razonable de implementar. – joran

+0

@joran ¿Debo hacer una solicitud de función basada en esto? Si es así, ¿cómo hace uno para hacerlo? –

Respuesta

1

¿Esta solución funcionaría mientras tanto? Usted tiene los encabezados repetidos, pero la escala x y la etiqueta se pueden descartar.

require(ggplot2) 
require(gridExtra) 
set.seed(10) 
dat <- data.frame(var1=rpois(1000, 20), 
        var2=as.factor(sample(LETTERS[1:4], 1000, replace=T)), 
        var3=as.factor(sample(month.abb[1:5], 1000, replace=T))) 
dat$var4 <- "All" 

windows(width=8, height=8) 

p1 <- ggplot(dat, aes(var1)) + 
    geom_histogram() + 
    facet_grid(var2~var3) + 


p2 <- ggplot(dat, aes(var1)) + 
    geom_histogram() + 
    facet_grid(~var3) 


grid.arrange(p1, p2, nrow=2, heights=c(4,1.5)) 

enter image description here

Usted probablemente ya sabe cómo abandonar el x-escala y la etiqueta de la primera parcela con scale_x_continuous('', breaks = NA).

Cuestiones relacionadas