使用grid.arrange跨多个绘图均匀的面板宽度

使用grid.arrange跨多个绘图均匀的面板宽度,r,ggplot2,R,Ggplot2,通过facet_wrap(…,ncol=1)显示多个绘图时,生成的绘图宽度相等(即使它们的轴文本长度不同) 是否可以使用grid.arrange实现统一的宽度(如左图所示) 图:facet\u wrap位于左侧,网格。将排列在右侧。确认实际适用于这种情况: 编一些数据: d <- data.frame(lab=c(paste("very very very very long label ......",1:2), paste("sL",1:2

通过
facet_wrap(…,ncol=1)
显示多个绘图时,生成的绘图宽度相等(即使它们的轴文本长度不同)

是否可以使用grid.arrange实现统一的宽度(如左图所示)

图:
facet\u wrap
位于左侧,
网格。将
排列在右侧。

确认实际适用于这种情况:

编一些数据:

d <- data.frame(lab=c(paste("very very very very long label ......",1:2),
                      paste("sL",1:2)),
                f=rep(c("A","B"),each=2))

d$z <- 1:4

library("ggplot2"); theme_set(theme_bw())
library("gridExtra")
d确认在这种情况下确实有效:

编一些数据:

d <- data.frame(lab=c(paste("very very very very long label ......",1:2),
                      paste("sL",1:2)),
                f=rep(c("A","B"),each=2))

d$z <- 1:4

library("ggplot2"); theme_set(theme_bw())
library("gridExtra")

d看看有什么方法可以做到这一点。这两个方面显然密切相关。我不能100%确定它是否算作复制品。我想让OP来权衡这个链接的答案在这种情况下是否有效。。。你能举一个可复制的例子吗?看起来和我完全一样,但我会根据本的建议推迟敲打它。(我刚刚看到一个我已经测试过代码的问题,答案是两行代码,结尾是“太宽了”。)很有趣。哪个
grob$widths
指定了主面板的宽度?我可以将其设置为任意值,而不是从其他绘图中提取值吗?如果是,怎么做?不知道,结果看起来有点不可思议(试着打印出
maxWidth
…)。试着做实验?看看有什么方法可以做到这一点。这两种方法看起来确实非常密切相关。我不能100%确定它是否算作复制品。我想让OP来权衡这个链接的答案在这种情况下是否有效。。。你能举一个可复制的例子吗?看起来和我完全一样,但我会根据本的建议推迟敲打它。(我刚刚看到一个我已经测试过代码的问题,答案是两行代码,结尾是“太宽了”。)很有趣。哪个
grob$widths
指定了主面板的宽度?我可以将其设置为任意值,而不是从其他绘图中提取值吗?如果是,怎么做?不知道,结果看起来有点不可思议(试着打印出
maxWidth
…)。尝试实验?
gA <- ggplotGrob(g1[[1]])
gB <- ggplotGrob(g1[[2]])
maxWidth <- grid::unit.pmax(gA$widths[2:5], gB$widths[2:5])
gA$widths[2:5] <- as.list(maxWidth)
gB$widths[2:5] <- as.list(maxWidth)
grid.arrange(gA, gB, ncol=1)