不同 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.position
和 plot.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)
需要进行一些手动调整。
情节看起来像:
我想并排放置两个 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.position
和 plot.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)
需要进行一些手动调整。
情节看起来像: