在列表列中打印出每个组的图

Print out plots for each group in list column

带有一些图的列表列:

mydiamonds <- diamonds %>% 
  group_by(cut, color) %>% 
  nest %>% 
  mutate(plots = map(data, ~ ggplot(.x, aes(x = x, y = price)) + geom_point()))

mydiamonds
# A tibble: 35 × 4
# Groups:   cut, color [35]
   cut       color data                 plots 
   <ord>     <ord> <list>               <list>
 1 Ideal     E     <tibble [3,903 × 8]> <gg>  
 2 Premium   E     <tibble [2,337 × 8]> <gg>  
 3 Good      E     <tibble [933 × 8]>   <gg>  
 4 Premium   I     <tibble [1,428 × 8]> <gg>  
 5 Good      J     <tibble [307 × 8]>   <gg>  
 6 Very Good J     <tibble [678 × 8]>   <gg>  
 7 Very Good I     <tibble [1,204 × 8]> <gg>  
 8 Very Good H     <tibble [1,824 × 8]> <gg>  
 9 Fair      E     <tibble [224 × 8]>   <gg>  
10 Ideal     J     <tibble [896 × 8]>   <gg>  
# … with 25 more rows

我想使用 facet_wrap() 打印出每个图,以便它们全部显示在一个图表中。但我什至无法将它们一张一张打印出来。尝试过:

mydiamonds %>% map(plots, ~print(.x))
Error in as_mapper(.f, ...) : object 'plots' not found

我希望很清楚我想从该片段中做什么 - 只需打印出每个图(这是在 Rmd 代码块中,因此可以很好地打印出来)

奖金 - 假设我弄清楚如何将它们打印出来,是否可以使用 facet_wrap() 将它们放在一张图表上,其中标题将是 paste0(cut, "|", color)?

plots 列在数据外不可见

library(ggplot2)
library(dplyr)
library(purrr)
mydiamonds %>%
   ungroup %>%
   # either pull the column
   # or use `.$plots`
   pull(plots) %>%
   map(print)

或使用walk

mydiamonds %>%
   ungroup %>%
   pull(plots) %>%
   walk(print)

我们可以用ggarrange把所有的情节放到一个页面里,但是太小了

library(ggpubr)
mydiamonds %>%
    ungroup %>%
    pull(plots) %>%
    ggarrange(plotlist = ., nrow = 5, ncol = 7)

或者导出到pdf

可能会更好
mydiamonds %>%
    ungroup %>%
    pull(plots) %>%
    ggarrange(plotlist = ., nrow = 1, ncol = 1) %>%
    ggexport(., filename="plots.pdf")

检查输出 pdf