r ggplot2 alignment gridextra gtable

Los peligros de alinear parcelas en ggplot



ggplot2 alignment (1)

PREGUNTA

¿Cómo se combinan parcelas separadas (ggplot2), con diferentes ejes y y diferentes alturas de parcela, pero se mantiene la alineación?

DETALLE

Al combinar gráficos con grid.arrange ( grid.arrange ), con diferentes unidades del eje y, no se alinean. Una forma de evitar esto es usar gtable ( gtable ), pero no puedo ajustar la altura relativa de las parcelas.

EJEMPLO

require(ggplot2) #Make two plots, with different y axis x = c(1, 5) y= c(.1, .4) data1<-data.frame(x,y) top<- ggplot(data1, aes(x=x, y=y))+ geom_line() x = c(1, 5) y= c(100000, 400000) data2<-data.frame(x,y) bottom<- ggplot(data2, aes(x=x, y=y))+ geom_line() # Method 1 - Grid Extra require(gridExtra) grid.arrange(top, bottom, heights=c(.6,.3))

El método 1 da como resultado esta gráfica, que está desalineada debido a las diferentes etiquetas de longitud y eje:

#Method 2 - gtable require(gtable) #Extract Grobs g1<-ggplotGrob(top) g2<-ggplotGrob(bottom) #Bind the tables g<-gtable:::rbind_gtable(g1, g2, "first") #Remove a row between the plots g <- gtable_add_rows(g, unit(-1,"cm"), pos=nrow(g1)) #draw grid.newpage() grid.draw(g)

El método 2 produce gráficos alineados, pero no puedo ajustar la altura de cada gráfico.

¡GRACIAS!


En su gtable g , puede establecer las alturas relativas del panel,

require(gtable) g1<-ggplotGrob(top) g2<-ggplotGrob(bottom) g<-gtable:::rbind_gtable(g1, g2, "first") panels <- g$layout$t[grep("panel", g$layout$name)] g$heights[panels] <- unit(c(1,2), "null") grid.newpage() grid.draw(g)