【问题标题】:Adding text to a grid.table plot将文本添加到 grid.table 图中
【发布时间】:2012-07-31 06:16:33
【问题描述】:

我最近开始使用gridExtra 包中的grid.table 函数将表格数据转换为png 图像文件,以便在网络上使用。到目前为止,我一直对它感到满意,因为它默认产生非常漂亮的输出,有点像表格的ggplot2。就像asked 这个问题的人一样,我很想看到能够为各个列指定理由,但这将是对已经更糟糕的蛋糕的锦上添花。

我的问题是是否可以在 grid.table 周围添加文本,以便我可以为绘制的表格提供标题和脚注。在我看来这应该是可行的,但我对网格图形的了解还不够,无法弄清楚如何将 grobs 添加到 table grob 中。例如这段代码:

require(gridExtra)

mydf <- data.frame(Item = c('Item 1','Item 2','Item 3'), 
                    Value = c(10,15,20), check.names = FALSE)
grid.table(mydf,
           gpar.coretext=gpar(fontsize = 16),
           gpar.coltext = gpar(fontsize = 16),
           gpar.rowtext = gpar(fontsize = 16),
           gpar.corefill = gpar(fill = "blue", alpha = 0.5, col = NA),
           h.even.alpha = 0.5,
           equal.width = FALSE,
           show.rownames = FALSE,
           show.vlines = TRUE,
           padding.h = unit(15, "mm"),
           padding.v = unit(8, "mm")
           )

生成此图:

当我真的希望能够在代码中执行类似以下操作而不是使用其他应用程序编辑图像时:

【问题讨论】:

    标签: r


    【解决方案1】:

    如果你想要只是标题(没有脚注),这里是@baptiste 示例的简化版本:

    title <- textGrob("Title", gp = gpar(fontsize = 50))
    padding <- unit(0.5,"line")
    table <- gtable_add_rows(
      table, heights = grobHeight(title) + padding, pos = 0
    )
    table <- gtable_add_grob(
      table, list(title),
      t = 1, l = 1, r = ncol(table)
    )
    grid.newpage()
    grid.draw(table)
    

    【讨论】:

      【解决方案2】:

      要将文本放置在靠近表格的位置,您需要先评估表格大小,

      library(gridExtra)
      d <- head(iris)
      table <- tableGrob(d)
      
      grid.newpage()
      h <- grobHeight(table)
      w <- grobWidth(table)
      title <- textGrob("Title", y=unit(0.5,"npc") + 0.5*h, 
                        vjust=0, gp=gpar(fontsize=20))
      footnote <- textGrob("footnote", 
                           x=unit(0.5,"npc") - 0.5*w,
                           y=unit(0.5,"npc") - 0.5*h, 
                        vjust=1, hjust=0,gp=gpar( fontface="italic"))
      gt <- gTree(children=gList(table, title, footnote))
      grid.draw(gt)
      

      编辑 (17/07/2015) 使用 gridExtra >=2.0.0,这种方法不再适用。 tableGrob 现在返回一个 gtable,可以更轻松地自定义。

      library(gridExtra)
      d <- head(iris)
      table <- tableGrob(d)
      
      library(grid)
      library(gtable)
      
      title <- textGrob("Title",gp=gpar(fontsize=50))
      footnote <- textGrob("footnote", x=0, hjust=0,
                           gp=gpar( fontface="italic"))
      
      padding <- unit(0.5,"line")
      table <- gtable_add_rows(table, 
                               heights = grobHeight(title) + padding,
                               pos = 0)
      table <- gtable_add_rows(table, 
                               heights = grobHeight(footnote)+ padding)
      table <- gtable_add_grob(table, list(title, footnote),
                               t=c(1, nrow(table)), l=c(1,2), 
                               r=ncol(table))
      grid.newpage()
      grid.draw(table)
      

      【讨论】:

      • 谢谢,这解决了问题,我从中学到了一些东西。我想我也可以在视口等中使用表格和文本 grobs?
      • 当然,你可以给gTree一个vp
      • 它可以工作,但是使用它后表格的颜色消失了。我只能为标题着色。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      • 2014-09-15
      • 1970-01-01
      相关资源
      最近更新 更多