2012-09-24 5 views
8

Sto cercando di utilizzare facet_grid o facet_wrap insieme a geom_raster. Tuttavia, in ciascun pannello, l'estetica z è su una scala diversa. Ad esempio,Più leggende per la stessa estetica

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

enter image description here.

Tuttavia, poiché i valori medi di C e D sono rispettivamente di circa 0 e 100, perdiamo molta risoluzione. Si potrebbe anche provare:

##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") 

che dà

enter image description here

e

enter image description here

ma ora ho due strisce y.

Domanda

  1. Posso alterare il primo lotto di dare due leggende per il fill estetica?
  2. Oppure, se faccio due grafici separati, posso rimuovere la striscia y su uno dei grafici per consentirmi di comprimerli - fare confusione con il tema, suggerisce che questo non è possibile.

dati

dati per riprodurre grafici

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)) 

risposta

7

Che dire di questo:

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)) 

anche voi potrebbe voglio giocare con plot.margin. E sembra che una risposta negativa alla tua prima domanda possa essere trovata here.

+0

Grazie. Giocare con 'plot.margin' mi permetterebbe di ottenere entrambi i grafici delle stesse dimensioni? Proprio ora l'area del grafico a sinistra è più piccola di quella a destra. – csgillespie

+0

@csgillespie, sembra così, ho modificato la risposta, ora sembra migliore. – Julius

+0

Grazie. È praticamente la stessa soluzione che ho trovato, ** ma ** Non ho pensato di spostare l'etichetta del pannello dal lato dello schermo - in ordine. La soluzione è un po 'hacky, ma ho il sospetto che sia la soluzione migliore. BTW, usando '+ ylab (NULL)' non mostra alcuna etichetta sull'asse y, il che potrebbe rendere la cosa un po 'più facile. Grazie. – csgillespie