Добавление текста в график 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")
)
генерирует этот сюжет:
когда я действительно хотел бы иметь возможность делать что-то вроде следующего в коде, а не редактировать изображение с помощью другого приложения:
2 ответа
Чтобы разместить текст рядом с таблицей, сначала нужно оценить размер таблицы,
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)