[英]Adding text to a grid.table plot
我最近開始使用gridExtra
包中的grid.table
函數將表格數據轉換為png圖像文件,以便在Web上使用。 我一直很高興,因為它默認產生非常好看的輸出,有點像桌子的ggplot2
。 就像提出這個問題的人一樣,我很樂意看到能夠指定單個列的理由,但那將是一個已經更多的蛋糕。
我的問題是是否可以在grid.table
周圍添加文本,以便我可以為繪制的表格提供標題和腳注。 在我看來這應該是可行的,但我不太了解網格圖形能夠解決如何將grobs添加到表格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")
)
生成這個情節:
當我真的希望能夠在代碼中執行類似下面的操作而不是使用其他應用程序編輯圖像時:
要將文本放在靠近表格的位置,首先要評估表格大小,
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)
如果你只想要標題(沒有腳注),這里是@ 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.