不同 facet_grid 图中的面板高度相等,ggplot2 R

Equal panel height in different facet_grid plots, ggplot2 R

我想并排放置两个 facet_grid 图,一个有 3 行,另一个有 2 行,在 R 中使用 ggplot2。默认情况下 grid.arrange 试图保持相同的高度两个 facet_grids 但是,我希望两者的面板高度相等 plots.Particularly 我想调整行数最少的图的面板高度,使其等于行数最大的图的面板高度的行。我不认为它应该很复杂。我在这里错过了一些共同的想法吗?由于我是 R 的新手,我们将不胜感激谢谢!

这里有一个可重现的例子:

library(tidyverse)
library(gridExtra)
mtcars
p1 <- ggplot(mtcars,aes(x =mpg,y = disp,fill=cyl))+
geom_point()+
facet_grid(rows=vars(gear),cols=vars(cyl),scales = "free")

p2 <- ggplot(mtcars,aes(x =mpg,y = disp,fill=cyl))+
  geom_point()+
  facet_grid(rows=vars(am),cols=vars(cyl),scales = "free")

grid.arrange(p1,p2,ncol=2)

产生

我想让 p2 具有从 p1 开始的面板高度,并使用 p2(右侧)的底部空白 space 作为图例,其余 space 为空白。是的,我必须保持规模是免费的。

不是很优雅,但你也许可以画一个空矩形,将它与你的 p2 垂直组合,然后与 p1:

组合
library(grid)
empty_panel <- grid.rect(gp=gpar(col="white"))

p2t <- grid.arrange(p2,empty_panel,ncol=1, heights=c(0.7,0.3))
grid.arrange(p1,p2t,ncol=2)

输出看起来像

如果您希望使用额外的 space 来放置您的图例,可以选择使用 legend.positionplot.margin:

p2 <- ggplot(mtcars,aes(x =mpg,y = disp,fill=cyl))+
   geom_point()+
   facet_grid(rows=vars(am),cols=vars(cyl),scales = "free")+
   
   theme(plot.margin= unit(c(0, 0, 4, 0), "cm")     ,legend.position = c(0.5, -0.3))
 
 grid.arrange(p1,p2,ncol=2) 

需要进行一些手动调整。

情节看起来像: