Добавление текста в таблицу 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]()
Ответы
Ответ 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)