Walking Over Dimensions For Plotting

Oct 2019 · 133 words · 1 minute read rstats dataviz purrr rlang

# fbr::with_proxy(devtools::install_github('hadley/nycflights13'))
library(nycflights13)
library(dplyr)
library(ggplot2)
library(rlang) # for sym()
library(purrr) # for walk()
ggthemr::ggthemr(palette = "flat", type = "outer")
plot_group <- function(group_var) {
  x <- flights %>%
    # !!sym() isn't recommended
    # see https://twitter.com/hadleywickham/status/1182624340887638016
    # group_by(!!sym(group_var)) %>%
    group_by(.data[[group_var]]) %>% 
    tally(name = "n_flights") %>%
    arrange(-n_flights) %>%
    mutate(
      d = as.factor(!!sym(group_var)),
      d_lumped = forcats::fct_lump(
        d,
        n = 9,
        w = n_flights
      ),
      na_level = "Other"
    ) %>%
    group_by(d_lumped) %>%
    summarise(n_flights = sum(n_flights)) %>%
    ungroup() %>%
    mutate(
      d_lumped = forcats::fct_reorder(d_lumped, n_flights)
    )

  p <- ggplot(
    x,
    aes(x = d_lumped, y = n_flights)
  ) +
    geom_col() +
    scale_y_continuous(labels = scales::comma) +
    coord_flip() +
    labs(
      title = glue::glue("Number of Flights: {group_var}"),
      x = glue::glue("{group_var}"),
      y = "Number of Flights"
    ) +
    theme(plot.background = element_rect(fill = "#EBF0F1", color = "grey"))
  print(p)
}
dims <- c("carrier", "origin", "dest")

purrr::walk(dims, plot_group)