Как мне разместить очень широкий grid.table или tableGrob, чтобы поместиться на странице PDF?
У меня есть довольно широкая таблица (4/3 ширины страницы), которую я пытаюсь распечатать, используя grid.table или grid.arrange (через tableGrob) в PDF-файл. Таблица выходит за границы страниц и обрезается. Есть ли способ заставить grid.table/grid.arrange масштабировать таблицу до области печати?
3 ответа
Я сделал это с помощью размеров шрифта. Не лучшее решение (требует ручного вмешательства), но, возможно, кто-то может предложить что-то более элегантное.
termTable = tableGrob(terms, h.even.alpha=1, h.odd.alpha=1, v.even.alpha=0.5, v.odd.alpha=1, core.just='left', rows=c(),
gpar.coretext =gpar(fontsize=8),
gpar.coltext=gpar(fontsize=10, fontface='bold'),
gpar.rowtext=gpar(fontsize=10, fontface='bold')
)
Есть способ, но неясно, что должно произойти, когда текст слишком широкий, чтобы поместиться в некоторые ячейки.
Один из вариантов - установить ширину вручную,
library(grid)
library(gridExtra)
g1 <- g2 <- tableGrob(head(iris, 10), rows=NULL)
g2$widths <- unit(rep(1/ncol(g2), ncol(g2)), "npc")
grid.newpage()
gt = arrangeGrob(textGrob("page 1"), textGrob("page 2"),
rectGrob(gp=gpar(fill="grey98")),
rectGrob(gp=gpar(fill="grey98")),
nullGrob(),
layout_matrix=rbind(c(1,5,2), c(3,5,4)),
widths = unit(c(1,5,1),c("null", "cm", "null")),
heights = unit(c(1, 1),c("line", "null")),
vp = viewport(width=0.9, height=0.9))
tc = list(g1, g2)
gt <- gtable::gtable_add_grob(gt, tc, l=c(1,3), t=2,
name="newgrobs")
grid.draw(gt)
но, конечно, с фиксированным размером шрифта это означает, что некоторый текст может быть обрезан.
Вероятно, лучший вариант - ввести разрывы строк и / или (немного) уменьшить размер шрифта.
g3 <- tableGrob(head(iris, 10), theme = ttheme_default(7),
rows=NULL, cols=gsub("\\.", "\\\n",names(iris)))
g3$widths <- unit(rep(1/ncol(g2), ncol(g2)), "npc")
grid.newpage()
gt = arrangeGrob(textGrob("page 1"), textGrob("page 2"),
rectGrob(gp=gpar(fill="grey98")),
rectGrob(gp=gpar(fill="grey98")),
nullGrob(),
layout_matrix=rbind(c(1,5,2), c(3,5,4)),
widths = unit(c(1,1,1),c("null", "line", "null")),
heights = unit(c(1, 1),c("line", "null")),
vp = viewport(width=0.9, height=0.9))
tc = list(g2, g3)
gt <- gtable::gtable_add_grob(gt, tc, l=c(1,3), t=2,
name="newgrobs")
grid.draw(gt)
В самой последней версии gridExtra правильное форматирование для обновления ответа rimorob:
termTable = tableGrob (Terms, theme =ttheme_default(gpar.coretext =gpar(fontsize=8), gpar.coltext=gpar(fontsize=10, fontface='bold'), gpar.rowtext=gpar(fontsize=10, fontface= = 'смелый')))