Как напечатать список-столбец ggplots в PDF? - PullRequest
0 голосов
/ 11 сентября 2018

Рассмотрим пример funny

mydata <- data_frame(group = c('a', 'a', 'a', 'b', 'b', 'b'),
           x = c(1,2,3,5,6,7),
           y = c(3,5,6,4,3,2))

> mydata
# A tibble: 6 x 3
  group     x     y
  <chr> <dbl> <dbl>
1 a         1     3
2 a         2     5
3 a         3     6
4 b         5     4
5 b         6     3
6 b         7     2

Здесь я могу nest() по группам и сохранить ggplot на основе группы в list-column.Сумасшедшие вещи.

> mydata %>% group_by(group) %>% 
+   nest() %>% 
+   mutate(myplot = map(data, ~ggplot(data = .x, aes(x = x, y = x)) + geom_point()))
# A tibble: 2 x 3
  group data             myplot  
  <chr> <list>           <list>  
1 a     <tibble [3 x 2]> <S3: gg>
2 b     <tibble [3 x 2]> <S3: gg>

Однако я хотел бы использовать map, чтобы распечатать каждую из этих диаграмм в один pdf.То есть по одной pdf странице на группу.

Здесь я в растерянности.Как я могу это сделать?Спасибо!

1 Ответ

0 голосов
/ 11 сентября 2018

Просто откройте устройство pdf и распечатайте их:)

library(tidyverse)
mydata <- data_frame(group = c('a', 'a', 'a', 'b', 'b', 'b'),
                     x = c(1,2,3,5,6,7),
                     y = c(3,5,6,4,3,2))

mydata2 <- mydata %>% group_by(group) %>% 
  nest() %>% 
  mutate(myplot = map(data, ~ggplot(data = .x, aes(x = x, y = x)) + geom_point()))

pdf()
print(mydata2$myplot)
dev.off()

В качестве комментария @aosmith вы можете пропустить вызов печати, если вы используете R в интерактивном режиме, но будьте осторожны, если вы добавите его позже вэта функция больше не будет работать, поэтому я рекомендую оставить ее явной.

Если вы хотите добавить ее в цепочку:

pdf()
mydata %>% group_by(group) %>% 
  nest() %>% 
  mutate(myplot = map(data, ~ggplot(data = .x, aes(x = x, y = x)) + geom_point())) %>%
  pull(myplot) %>%
  print
dev.off()

Первый аргумент pdf - этопуть к вашему распечатанному файлу и по умолчанию это "Rplots.pdf", поэтому он будет в вашей рабочей папке.Подробнее см. ?pdf.

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