在列表列中打印出每个组的图
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
带有一些图的列表列:
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