2012-09-24 16 views
8

Estoy tratando de usar facet_grid o facet_wrap junto con geom_raster. Sin embargo, en cada panel, la estética z está en una escala diferente. Por ejemplo,Múltiples leyendas para la misma estética

##Data at end of question 
ggplot(dd, aes(x,y)) + 
    geom_raster(aes(fill=z)) + 
    facet_grid(type ~ var) 

da

enter image description here.

Sin embargo, dado que los valores promedio de C y D son alrededor de 0 y 100 respectivamente, perdemos mucha resolución. También puede probar:

##Change C to D to get other panel 
ggplot(subset(dd, var=="C"), aes(x,y))+ 
    geom_raster(aes(fill=z)) + 
    facet_grid(type ~ var) + 
    theme(legend.position="bottom") 

que da

enter image description here

y

enter image description here

pero ahora tengo dos tiras y.

Pregunta

  1. ¿Puedo modificar la primera parcela para dar dos leyendas de la fill estética?
  2. O, si hago dos gráficos separados, ¿puedo quitar la tira y en uno de los trazados para permitir que los presione juntos? Al jugar con el tema, sugiere que esto no es posible.

datos

datos para reproducir gráficos

dd = expand.grid(x=1:10, y=1:10) 
dd = data.frame(dd, type=rep(LETTERS[1:2], each=100), 
      var =rep(c("C", "D"), each=200)) 
dd$z = rnorm(400, rep(c(0, 100), each=200)) 

Respuesta

7

Qué tal esto:

enter image description here

library(gridExtra) 
p1 <- ggplot(subset(dd, var=="C"), aes(x,y))+ 
    geom_raster(aes(fill=z)) + facet_grid(type ~ var) + 
    theme(legend.position="bottom", plot.margin = unit(c(1,-1,1,0.2), "line")) 
p2 <- ggplot(subset(dd, var=="D"), aes(x,y))+ 
    geom_raster(aes(fill=z)) + facet_grid(type ~ var) + 
    theme(legend.position="bottom", plot.margin = unit(c(1,1,1,-0.8), "line"), 
     axis.text.y = element_blank(), axis.ticks.y = element_blank()) + ylab("") 
grid.arrange(arrangeGrob(p1, p2, nrow = 1)) 

también le podría Quiero jugar con plot.margin. Y parece que se puede encontrar una respuesta negativa a su primera pregunta here.

+0

Gracias. ¿Jugar con 'plot.margin' me permitiría obtener ambas tramas del mismo tamaño? Justo ahora el área de trazado de la izquierda es más pequeña que la de la derecha. – csgillespie

+0

@csgillespie, parece que sí, edité la respuesta, se ve mejor ahora. – Julius

+0

Gracias. Esa es casi la misma solución que se me ocurrió, ** pero ** no pensé en cambiar la etiqueta del panel del lateral de la pantalla, ordenada. La solución es un poco hacky, pero sospecho que es la mejor solución. Por cierto, el uso de '+ ylab (NULL)' no muestra ninguna etiqueta del eje y, lo que puede hacer las cosas un poco más fáciles. Gracias. – csgillespie

Cuestiones relacionadas