【问题标题】:How can I top align these tables in gtable using grid.arrange?如何使用 grid.arrange 在 gtable 中对齐这些表?
【发布时间】:2018-01-18 18:09:25
【问题描述】:

我有一个降价文档,使用一点 LaTeX 来生成一个带有以下块的 .pdf:

grid.arrange(
  grobs = list(
    gtable_combine(
      gtable_add_grob(
        tableGrob(mtcars[1:3, 1:2], rows = NULL),
        grobs = segmentsGrob(y1 = unit(0, "npc"),
        gp = gpar(fill = NA, lwd = 2)),
        t = 1,
        l = 1,
        r = ncol(mtcars[1:3, 1:2])
        ),
      gtable_add_grob(
        tableGrob(mtcars[1:3, 1:2], rows = NULL),
        grobs = segmentsGrob(y1 = unit(0, "npc"),
        gp = gpar(fill = NA, lwd = 2)),
        t = 1,
        l = 1,
        r = ncol(mtcars[1:3, 1:2])
        ),
        along = 2), 
    gtable_add_grob(
      tableGrob(mtcars[1:8, 1:2], rows = NULL),
      grobs = segmentsGrob(y1 = unit(0, "npc"),
                           gp = gpar(fill = NA, lwd = 2)),
      t = 1,
      l = 1,
      r = ncol(mtcars[1:8, 1:2])
      )
    ),
  ncol = 2
  )

输出居中对齐,我希望它在顶部对齐。我的症结是左侧已经是两个组合表,我似乎无法将该函数的输出嵌套到另一个 cal 到 gtable_combine()。我在 gridExtra 中使用 layout_matrix= 参数也没有任何运气,因为这会在左侧两个表之间增加大量空间。

我怎样才能让左边的两张桌子非常接近(相邻的很好),并且还让最左边的桌子的顶部和右边的桌子的顶部水平对齐?

【问题讨论】:

    标签: r knitr r-markdown gridextra gtable


    【解决方案1】:

    试试

    library(gridExtra)
    
    t1 <- tableGrob(mtcars[1:3,], rows = NULL)
    t2 <- tableGrob(mtcars[1:8,], rows = NULL)
    
    grid.draw(gtable_combine(t1, t2))
    

    enter image description here

    【讨论】:

    • 您能否添加一个简短的说明,说明 OP 究竟应该如何处理此代码或将其放在何处?
    • 感谢您的建议,但我的要求的一个关键部分是有 3 个表,而不是您这里的两个,排列成两个较短的表彼此靠近,底部为一个与另一个的顶部相邻,则短表的 组合 顶部对齐并位于较长表的右侧。
    【解决方案2】:

    我从这个prior SO post 中找到了答案。在我看来,两个较短表 gtable_combine(...) 的输出的填充与较长表的输出不同,因为顶部填充默认情况下是表长度的函数,这里是两个表,即使当结合起来,长度会有所不同。 @baptiste 在他的回答中概述的函数通过修复填充值解决了这个问题。在我的用例中实现它如下所示:

    justify <- function(x, hjust="center", vjust="top", draw=FALSE){
      w <- sum(x$widths)
      h <- sum(x$heights)
      xj <- switch(
        hjust,
        center = 0.5,
        left = 0.5 * w,
        right = unit(1, "npc") - 0.5 * w
        )
      yj <- switch(
        vjust,
        center = 0.5,
        bottom = 0.5 * h,
        top = unit(1, "npc") - 0.5 * h
        )
      x$vp <- viewport(x=xj, y=yj)
      if(draw) grid.draw(x)
      return(x)
    }
    
    grid.arrange(
      justify(
        gtable_combine(
          gtable_add_grob(
            tableGrob(mtcars[1:3, 1:2], rows = NULL),
            grobs = segmentsGrob(y1 = unit(0, "npc"),
                                 gp = gpar(fill = NA, lwd = 2)),
            t = 1,
            l = 1,
            r = ncol(mtcars[1:3, 1:2])
            ),
          gtable_add_grob(
          tableGrob(mtcars[1:3, 1:2], rows = NULL),
          grobs = segmentsGrob(y1 = unit(0, "npc"),
                               gp = gpar(fill = NA, lwd = 2)),
          t = 1,
          l = 1,
          r = ncol(mtcars[1:3, 1:2])
          ),
          along = 2
          )
        ), 
      justify(
        gtable_add_grob(
          tableGrob(mtcars[1:8, 1:2], rows = NULL),
          grobs = segmentsGrob(y1 = unit(0, "npc"),
                               gp = gpar(fill = NA, lwd = 2)),
          t = 1,
          l = 1,
          r = ncol(mtcars[1:3, 1:2])
          )
        ),
      ncol = 2
      )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 2021-07-31
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多