使用grid.arrange跨多个图表的统一面板宽度

时间:2015-12-02 16:48:01

标签: r ggplot2

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

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

enter image description here

图:左侧为facet_wrap,右侧为grid.arrange

1 个答案:

答案 0 :(得分:0)

确认the linked answer实际上适用于此案例:

制作一些数据:

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")

生成两个图:

g1 <- lapply(split(d,d$f),
             function(dd) 
                 ggplot(dd,aes(x=lab,y=z))+geom_bar(stat="identity")+
                     coord_flip()+labs(x=""))

现在应用建议的答案:

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)

enter image description here