2015-12-02 136 views
1

当通过facet_wrap(..., ncol = 1)显示多个图时,生成的图宽等于(即使他们的轴文本长度不同)。使用grid.arrange覆盖多个图的统一面板宽度

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

enter image description here

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

+3

请参阅[此SO回答](http://stackoverflow.com/a/13295880/496488)的方式来做到这一点。 – eipi10

+0

这些似乎非常密切相关。我不是100%确定它是否重复。我希望OP在这种情况下衡量链接的答案是否真正起作用......你能举出一个可重复的例子吗? –

+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