2012-08-02 46 views
27

我最近開始使用gridExtra包中的grid.table函數將表格數據轉換爲png圖像文件以供在Web上使用。我一直很喜歡它,因爲它默認產生非常好看的輸出,有點像表格的ggplot2。就像這個問題的人一樣,我希望看到能夠爲每個列指定理由,但這會爲什麼已經是更多的蛋糕錦上添花。將文本添加到grid.table圖

我的問題是,是否有可能圍繞grid.table添加文本,以便我可以爲繪製的表格添加標題和腳註。在我看來,這應該是可行的,但是我對柵格圖形不夠了解,無法確定如何將Grobs添加到表格中。例如,下面的代碼:

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") 
      ) 

產生這樣的情節:

enter image description here

的時候我真的很希望能夠做到像在下列代碼,而不是與其他編輯圖像應用:

enter image description here

回答

41

要放置文本近臺你要評估選項卡文件尺寸的第一,

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) 
+0

謝謝,這解決了這個問題,我學到了幾件事。我想我也可以在視口中使用表格和文本格式等等? – SlowLearner 2012-08-02 13:26:29

+0

當然,你可以給vT的gTree – baptiste 2012-08-02 20:10:13

+0

它的工作原理,但使用後,表的顏色消失。我只能用顏色來標題。 – lulumink 2014-03-12 16:25:21

2

如果你想只是標題(沒有腳註),這裏是@巴蒂斯特的實例的簡化版本:

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)