Home > Blockchain >  Extract ggplot from a nested dataframe
Extract ggplot from a nested dataframe

Time:02-11

I have created a set of ggplots using a grouped dataframe and the map function and I would like to extract the plots to be able to manipulate them individually.

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")

In this case, "nissan" is a list object and I am not able to manipulate it. How do I extract the ggplot?

CodePudding user response:

In terms of data structures, I think retaining a tibble (or data.frame) is suboptimal with respect to the illustrated usage. If you have one plot per manufacturer, and you plan to access them by manufacturer, then I would recommend to transmute and then deframe out to a list object.

That is, I would find it more conceptually clear here to do something like:

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")

Otherwise, if you want to keep the tibble, another option similar to what has been suggested in the comments is to use a first() after the pull.

  • Related