【问题标题】:reduce space between grid.arrange plots减少 grid.arrange 绘图之间的空间
【发布时间】:2012-11-08 23:07:55
【问题描述】:

我问了一个关于网格排列的问题HERE,得到了很好的回应。我现在想减少地块之间的空间,但出现错误。首先我介绍有效的代码,然后介绍错误代码(我尝试过的)。我实际上找不到grid.arrange,并且一直认为它来自gridExtra,但我可能不正确。

所以两部分:

  1. 如何使用网格排列减少绘图之间的空间
  2. 我在哪里可以找到有关 grid.arrange 的文档(Baptiste 我知道您维护 gridExtra,所以如果我没有按照预期的方式使用它,请更正我的想法或对包的使用。)

好代码坏空间

require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +
    coord_flip() + ylab("")
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip() 


 gA <- ggplot_gtable(ggplot_build(A))
 gB <- ggplot_gtable(ggplot_build(B))
 maxWidth = grid::unit.pmax(gA$widths[2:3], gB$widths[2:3])
 gA$widths[2:3] <- as.list(maxWidth)
 gB$widths[2:3] <- as.list(maxWidth)
 grid.arrange(gA, gB, ncol=1)

错误的代码(我的尝试)

require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +
    coord_flip() + ylab("") + theme(plot.margin= unit(1, "cm"))
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip() 


 gA <- ggplot_gtable(ggplot_build(A))
 gB <- ggplot_gtable(ggplot_build(B))
 maxWidth = grid::unit.pmax(gA$widths[2:3], gB$widths[2:3])
 gA$widths[2:3] <- as.list(maxWidth)
 gB$widths[2:3] <- as.list(maxWidth)
 grid.arrange(gA, gB, ncol=1)

错误:

Error in `[.unit`(theme$plot.margin, 2) : 
  Index out of bounds (unit subsetting)

【问题讨论】:

    标签: r ggplot2 gridextra


    【解决方案1】:

    我误解了ggplot:

    require(ggplot2);require(gridExtra)
    A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +
        coord_flip() + ylab("") + theme(plot.margin= unit(c(1, 1, -1, 1), "lines"))
    B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip() + 
        theme(plot.margin= unit(rep(.5, 4), "lines"))
    
    
     gA <- ggplot_gtable(ggplot_build(A))
     gB <- ggplot_gtable(ggplot_build(B))
     maxWidth = grid::unit.pmax(gA$widths[2:3], gB$widths[2:3])
     gA$widths[2:3] <- as.list(maxWidth)
     gB$widths[2:3] <- as.list(maxWidth)
     grid.arrange(gA, gB, ncol=1)
    

    【讨论】:

      【解决方案2】:

      是的, doc 说: plot.margin |整个绘图周围的边距(具有顶部、右侧、底部和左侧边距大小的单位)

      【讨论】: