从嵌套数据框中提取 ggplot

Extract ggplot from a nested dataframe

我使用分组数据框和地图函数创建了一组 ggplot,我想提取这些图以便能够单独操作它们。

library(tidyverse)

plot <- function(df, title){
  df %>% ggplot(aes(class)) +
    geom_bar() + 
    labs(title = title)
}

plots <- mpg %>% group_by(manufacturer) %>%  nest() %>% 
  mutate(plots= map(.x=data, ~plot(.x, manufacturer)))

nissan <- plots %>% filter(manufacturer == "nissan") %>% pull(plots) 
nissan

nissan + labs(title = "Nissan")

在这种情况下,“nissan”是一个列表对象,我无法对其进行操作。如何提取 ggplot?

就数据结构而言,我认为保留 tibble(或 data.frame)就图示用法而言是次优的。如果您每个制造商有一个地块,并且您计划按制造商访问它们,那么我会建议 transmute 然后 deframelist object.

也就是说,我会发现在这里做一些事情在概念上更清楚:

library(tidyverse)

plot <- function(df, title){
  df %>% ggplot(aes(class)) +
    geom_bar() + 
    labs(title = title)
}

plots <- mpg %>% 
  group_by(manufacturer) %>% nest() %>% 
  transmute(plot=map(.x=data, ~plot(.x, manufacturer))) %>%
  deframe()

plots[['nissan']]

plots[['nissan']] + labs(title = "Nissan")

否则,如果您想保留小标题,另一个类似于评论中建议的选项是在 pull.

之后使用 first()