Подтвердить что ты не робот

Добавление текста в таблицу grid.table

Недавно я начал использовать функцию grid.table из пакета gridExtra, чтобы превратить табличные данные в файлы изображений png для использования в Интернете. Я был в восторге от этого, поскольку по умолчанию он производит очень красивый вывод, вроде как ggplot2 для таблиц. Подобно человеку, который спросил этот вопрос, мне бы хотелось увидеть возможность указать оправдание для отдельных столбцов, но это было бы обледенением на то, что является уже более-точным торт.

Мой вопрос в том, можно ли добавить текст вокруг grid.table, чтобы я мог давать построенные таблицы заголовок и сноску. Мне кажется, что это должно быть осуществимо, но я не знаю достаточно о сетчатой ​​графике, чтобы иметь возможность определить, как добавить гниль в стоп-ловушку. Например, этот код:

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

4b9b3361

Ответ 1

Чтобы поместить текст близко к таблице, вы сначала захотите оценить размер таблицы,

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)

Ответ 2

Если вы хотите просто заголовок (без сноски), вот упрощенная версия примера @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)