Сохранение кадра данных в pdf отрегулируйте ширину - PullRequest
0 голосов
/ 29 мая 2019

Я обнаружил, что grid.table может использоваться для построения кадра данных в pdf-файле, как описано здесь .Я хочу сохранить фрейм данных в альбомном формате A4, однако, похоже, он не масштабирует данные таким образом, чтобы он хорошо вписывался в границы PDF-файла.

Код

library(gridExtra)

set.seed(1)
strings <- c('Wow this is nice', 'I need some coffee', 'Insert something here', 'No ideas left')
table <- as.data.frame(matrix(ncol = 9, nrow = 30, data = sample(strings,30, replace = TRUE)))
pdf("test.pdf", paper = 'a4r')
grid.table(table)
dev.off()

Вывод
Не вся таблица показана в формате PDF: enter image description here

Вопрос
Как я могу убедиться, что кадр данных масштабирован, чтобы уместиться в альбомную ориентацию A4? Мне явно не нужно gridExtra или сохранение по умолчанию pdf, я могу использовать любой другой пакет, если этилегче это исправить.


РЕДАКТИРОВАТЬ

Я встречал этот другой вопрос , очевидно, можно определить необходимую высоту и ширинуtableGrob

tg = gridExtra::tableGrob(table)
h = grid::convertHeight(sum(tg$heights), "mm", TRUE)
w = grid::convertWidth(sum(tg$widths), "mm", TRUE)
ggplot2::ggsave("test.pdf", tg, width=w, height=h, units = 'mm')

Здесь h = 172.2 и w = 444.3, которые превышают размер стандартного A4, а именно 210 x 279. Так что я знаю, что это вызывает проблему, однако все еще не может разобраться в масштабевниз по столу, чтобы разместить его на A4.

1 Ответ

0 голосов
/ 29 мая 2019

Я понял, что могу добавить параметр scale к ggsave. Я написал простую функцию для получения оптимального масштаба:

optimal.scale <- function(w,h, wanted.w, wanted.h) max(c(w/wanted.w, h/wanted.h))

Я добавил 0,1 к шкале, чтобы добавить поле на график, чтобы текст не находился непосредственно на краю листа. Затем я передал полученную шкалу ggsave

  tg = gridExtra::tableGrob(table
  h = grid::convertHeight(sum(tg$heights), "mm", TRUE)
  w = grid::convertWidth(sum(tg$widths), "mm", TRUE)
  scale = optimal.scale(w,h, 279, 210) + 0.1 #A4 = 279 x 210 in landscape 
  ggplot2::ggsave("test.pdf", tg, width = 279, height = 210, units = 'mm' , scale = scale)

Теперь мой стол подходит к А4:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...