Grob 中的表格左对齐

问题描述 投票:0回答:1

有没有办法将 Grob 中的表格与面板左侧对齐而不是居中?

在下面的示例中,您可以看到表格位于下面板的中心,但我希望它与左侧对齐。我找不到任何方法可以做到这一点。

library(gridExtra)
library(grid)

grid.arrange(
  grobTree(
    rectGrob(gp=gpar(fill="gray", col = NA)),
    textGrob("Title\nThis is some text.\nAnd more text.\nAnd more text.",
             x = 0.01, y=0.95, gp = gpar(fontsize = 12), just = c("left", "top"))
  ),
  grobTree(
    rectGrob(gp=gpar(fill="lightgray", col = NA)),
    tableGrob(head(mtcars[1:4]), rows = NULL)
  )
)

创建于 2023-10-19,使用 reprex v2.0.2

我是 Grobs 的新手,因此如果您对如何以更好的方式实现此目标有任何一般性建议,请告诉我!

r plot gridextra r-grid grob
1个回答
0
投票

您需要为

tableGrob
提供自己的视口以绘制到:

library(gridExtra)
library(grid)

grid.arrange(
  grobTree(
    rectGrob(gp=gpar(fill="gray", col = NA)),
    textGrob("Title\nThis is some text.\nAnd more text.\nAnd more text.",
             x = 0.01, y=0.95, gp = gpar(fontsize = 12), just = c("left", "top"))
  ),
  grobTree(
    rectGrob(gp=gpar(fill="lightgray", col = NA)),
    tableGrob(head(mtcars[1:4]), rows = NULL,
              vp = viewport(x = 0.18, y = 0.5))
  )
)

这里的困难之一是

tableGrob
是固定宽度,但您的绘图设备不是。这意味着为视口选择 x 值需要根据绘图大小进行调整。如果您想让表格保持在左侧,无论您的绘图如何缩放,您可以使用 grob 本身副本的宽度来指示 x 位置:

grid.arrange(
  grobTree(
    rectGrob(gp=gpar(fill="gray", col = NA)),
    textGrob("Title\nThis is some text.\nAnd more text.\nAnd more text.",
             x = 0.01, y=0.95, gp = gpar(fontsize = 12), just = c("left", "top"))
  ),
  grobTree(
    rectGrob(gp=gpar(fill="lightgray", col = NA)),
    tableGrob(head(mtcars[1:4]), rows = NULL,
              vp = viewport(x = unit(1.5, 'grobwidth', 
                                     data = tableGrob(head(mtcars[1:4]),
                                                      rows = NULL)), 
                            y = 0.5))
  )

现在,无论绘图如何缩放,表格仍然与左侧完全对齐。

© www.soinside.com 2019 - 2024. All rights reserved.