Estoy tratando de combinar dos objetos ggplot FACETADOS con coord_equal() usando cowplot::plot_grid() o egg::ggarrange() y alinearlos verticalmente.

El enfoque egg::ggarrange() funciona bien para parcelas NO FACETADAS, con la solución publicada aquí.

Sin embargo, la solución egg::ggarrange() se rompe cuando se incluyen las facetas. Los gráficos están alineados correctamente, pero las unidades de los ejes y son dos veces más grandes que las de los ejes x . ¿Alguna sugerencia sobre cómo generalizar esto para las facetas?

dat1 <- data.frame(x = rep(1:10, 2), y = 1:20, z = rep(c("A", "B"), 10))
dat2 <- data.frame(x = 1:10, y = 1:10, z = rep(c("A", "B"), 5))
plot1 <- ggplot(dat1, aes(x=x, y=y)) + 
  geom_point() + coord_equal() + facet_wrap(~z)
plot2 <- ggplot(dat2, aes(x=x, y=y)) + 
  geom_point() + coord_equal() + facet_wrap(~z)
egg::ggarrange(plot1, plot2, ncol = 1)

image 1

5
Kevin 24 feb. 2018 a las 13:44

2 respuestas

La mejor respuesta

Parece ser una solución simple,

library(egg)

b <- body(gtable_frame)
b[6] <- parse(text="if (fixed_ar) {
    ar <- as.numeric(g$heights[tt[1]]) / as.numeric(g$widths[ll[1]])
    height <- width * (ar / length(ll))
    g$respect <- FALSE
}")

body(gtable_frame) <- b

assignInNamespace("gtable_frame", gtable_frame, ns = 'egg')

enter image description here

3
Claus Wilke 24 feb. 2018 a las 20:36

El principal problema es que plot1 y plot2 tienen diferentes proporciones. Este es plot1: ingrese la descripción de la imagen aquí

Y esta plot2:

enter image description here

Puede intentar mantener la relación de aspecto usando, es decir, theme(aspect.ratio=1) en lugar de coord_equal():

require(ggplot2)
dat1 <- data.frame(x = rep(1:10, 2), y = 1:20, z = rep(c("A", "B"), 10))
dat2 <- data.frame(x = 1:10, y = 1:10, z = rep(c("A", "B"), 5))
plot1 <- ggplot(dat1, aes(x=x, y=y)) + geom_point() + theme(aspect.ratio=1)+
  facet_wrap(~z)
plot2 <- ggplot(dat2, aes(x=x, y=y)) + geom_point() + theme(aspect.ratio=1)+
  facet_wrap(~z)
egg::ggarrange(plot1, plot2, ncol = 1,heights = c(1,10))

enter image description here

Espero que sirva.

2
Mabel Villalba 24 feb. 2018 a las 11:15