如何将ggplots的列表列打印为pdf?

时间:2018-09-10 21:16:27

标签: r ggplot2 dplyr purrr

考虑这个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 :(得分:1)

只需打开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