将 multi-line 脚注添加到 tableGrob,同时在 R 中使用 gridextra

Add multi-line footnote to tableGrob, while using gridextra in R

我最近开始使用 tableGrob 和 gridextra 来组合多个地块和 tables。我希望 mt tableGrob 有脚注和标题。

下面的 link 很好地回答了这个问题: Adding text to a grid.table plot

但是在上面的代码中,脚注被截断了,因为它太长了。有人可以建议一个替代方案,以便脚注在到达 table 末尾后自动换行到下一行吗?要是能在单词中间换行就好了。

test <- data.frame(boo = c(20,1), do = c(2,10), no = c(3,5),co = c('ed','jeff'))

t1 <- tableGrob(test)

tw <- convertWidth(unit(grobWidth(t1),'npc'),
                   "in", valueOnly = T)

title <- textGrob("Title is long too or is it??",gp=gpar(fontsize=15))
footnote <- textGrob("footnote is pretty longgg but not unusually longgggggggggkjwd jwkldn", x=0, hjust=0,
                     gp=gpar( fontface="italic"))

padding <- unit(0.5,"line") 

t1 <- gtable_add_rows(t1, 
                        heights = grobHeight(title) + padding,
                        pos = 0)
t1 <- gtable_add_rows(t1, 
                        heights = grobHeight(footnote)+ padding)
t1 <- gtable_add_grob(t1, list(title, footnote),
                        t=c(1, nrow(t1)), l=c(1,1), 
                        r=ncol(t1))

grid.arrange(t1)

当我有一个绘图和 table 网格排列时,我希望它能工作。请帮忙。

我尝试使用 strwrap 并将宽度设置为 grobWidth,但它对我不起作用。

RGraphics book/package 提供了一个可能的解决方案,

splitString <- function (text, width) {
  strings <- strsplit(text, " ")[[1]]
  newstring <- strings[1]
  linewidth <- stringWidth(newstring)
  gapwidth <- stringWidth(" ")
  availwidth <- convertWidth(width, "in", valueOnly = TRUE)
  for (i in 2:length(strings)) {
    width <- stringWidth(strings[i])
    if (convertWidth(linewidth + gapwidth + width, "in", 
                     valueOnly = TRUE) < availwidth) {
      sep <- " "
      linewidth <- linewidth + gapwidth + width
    }
    else {
      sep <- "\n"
      linewidth <- width
    }
    newstring <- paste(newstring, strings[i], sep = sep)
  }
  newstring
}


tit <- "Title is long too or is it??"
foot <- "footnote is pretty longgg but not unusually longgggggggggkjwd jwkldn"
footnote <- textGrob(splitString(foot, sum(t1$widths)))
title <- textGrob(splitString(tit, sum(t1$widths)))
t1 <- gtable_add_rows(t1, heights = grobHeight(footnote))
t1 <- gtable_add_rows(t1, heights = grobHeight(title), 0)
t1 <- gtable_add_grob(t1, list(title, footnote),
                      t=c(1, nrow(t1)), l=1, r=ncol(t1))

grid.draw(t1)