Estoy usando ggplot y tengo dos gráficos que quiero mostrar uno encima del otro. Solía grid.arrange
desde gridExtra apilarlos. El problema es que quiero que los bordes izquierdos de los gráficos se alineen así como los bordes derechos independientemente de las etiquetas de los ejes. (el problema surge porque las etiquetas de un gráfico son cortas mientras que el otro es largo).
La pregunta:
¿Cómo puedo hacer esto? No estoy casado con grid.arrange pero el ggplot2 es imprescindible.
Lo que probé:
intenté jugar con anchos y alturas, así como con ncol y nrow para hacer una cuadrícula de 2 x 2 y colocar las imágenes en esquinas opuestas y luego jugar con las anchuras, pero no pude obtener las imágenes en esquinas opuestas. .
require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +coord_flip()
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip()
grid.arrange(A, B, ncol=1)
Respuestas:
Prueba esto,
Editar
Aquí hay una solución más general (funciona con cualquier número de parcelas) usando una versión modificada de
rbind.gtable
incluido engridExtra
fuente
tableGrob
. Elgtable::cbind
me da un error de decepcionante:nrow(x) == nrow(y) is not TRUE
. ¿Alguna sugerencia?[2:5]
soporte?Quería generalizar esto para cualquier número de parcelas. Aquí hay una solución paso a paso utilizando el enfoque de Baptiste:
recopilar los anchos de cada grupo de cada parcela
use do.call para obtener el ancho máximo
asigne el ancho máximo a cada grob
trama
fuente
Usando el paquete cowplot :
fuente
En http://rpubs.com/MarkusLoew/13295 hay una solución realmente fácil disponible (último elemento) aplicada a este problema:
también puede usar esto para ancho y alto:
fuente
size="first"
significa que la alineación no se verá muy bien si la segunda parcela es más grande que la primeraEl
egg
paquete envuelve los objetos ggplot en una3x3
tabla gt estandarizada , lo que permite la alineación de los paneles de gráficos entre ggplots arbitrarios, incluidos los facetados.fuente
geom_tile
) con una leyenda en la parte inferior y un mapa de calor multifacético (facet_grid
congeom_tile
), pero no pudo alinear la altura de la tercera gráfica, que era un dendrograma (geom_segment
). sin embargo, cowplot ogridExtra::grid.arrange
no pudimos hacer ni siquiera lo primero, por lo que esto funciona mejor hasta ahoraAquí hay otra posible solución usando
melt
el paquete reshape2, yfacet_wrap
:fuente
El paquete de patchwork maneja esto por defecto:
Creado el 2019-12-08 por el paquete reprex (v0.3.0)
fuente
En el mejor de los casos, esto es un truco:
Aunque se siente realmente mal.
fuente
Sé que esta es una publicación antigua y que ya ha sido respondida, pero puedo sugerir combinar el enfoque de @ baptiste con
purrr
para que se vea más agradable:fuente