Waffle

Intro

This section includes an application of the waffle package which is used to make waffle and pictograph charts in R. The pictograph portion was not working when I created this.

Variable Names for MN Economic Industry Dataset 2017

sector = NAICS economic sector estab = Number of establishments napcsdol = Sales, value of shipments, or revenue of NAPCS collection code ($1,000)

44 Retail Trade Educational Services Health Care and Social Assistance Arts, Entertainment and Recreation Accommodation and Food Services Personal and Laundry Services

mn_eco_industry <- clean_names(mn_eco_industry_raw) |>
  select(naics2017, naics2017_label, sector, estab, napcsdol) |>
  mutate(estab = as.numeric(estab)) |>
  filter(!is.na(estab)) |>
  mutate(napcsdol = as.numeric(napcsdol)) |>
  mutate(sector_label = case_when(
           sector == 44 ~ "Retail Trade",
           sector == 61 ~ "Educational Services",
           sector == 62 ~ "Health Care and Social Assistance",
           sector == 71 ~ "Arts, Entertainment and Recreation",
           sector == 72 ~ "Accommodation and Food Services",
           sector == 81 ~ "Personal and Laundry Services",
           TRUE ~ as.character(sector)
         ))

Example Waffle Chart

example <- tibble(
  parts = factor(rep(month.abb[1:3], 3), levels=month.abb[1:3]),
  vals = c(10, 20, 30, 6, 14, 40, 30, 20, 10),
)

example |>
  count(parts, wt = vals) |>
  ggplot(
    aes(fill = parts, values = n)
  ) +
  geom_waffle(
    n_rows = 20,
    size = 0.33, 
    colour = "white",
    flip = TRUE
  ) +
  scale_fill_manual(
    name = NULL,
    values = c("#a40000", "#169948", "#ae6056"),
    labels = c("Fruit", "Salad", "Pizza")
  ) +
  coord_equal() +
  theme_minimal()+
  theme_enhance_waffle()

MN Economic Industry Sectors 2017

prop_eco <- mn_eco_industry |>
  group_by(sector_label) |>
  summarize(total = sum(estab)) |>
  mutate(prop = (total * 100 / sum(total)) + 0.35)

parts <- tibble(names = prop_eco$sector_label, 
                vals = prop_eco$prop)

waffle(parts, 
       rows = 10,
       size = 2,
       pad = 4,
       legend_pos = "bottom",
       title = "Minnesota Economic Industry Proportion by Sector")

prop_eco |>
  ggplot(
    aes(fill = sector_label, values = prop)
  ) +
geom_waffle(
    n_rows = 10,
    size = 1.5, 
    colour = "black",
    flip = FALSE,
  ) +
  scale_fill_manual(
    name = NULL,
    values = c("#0A9396", "#94D2BD", "#E9D8A6", "#EE9B00", "#CA7902", "#9B2226")
  ) +
  coord_equal() +
  labs(
    title = "Minnesota Economic Industry",
    subtitle = "Proportion of Establishments by Sector",
    caption = "Source: U.S. Census Bureau 2017"
  ) +
  dark_theme_minimal(base_size = 14)+
  theme_enhance_waffle()

MN Economic Industry Retail Subsectors 2017

retail <- mn_eco_industry |>
  filter(sector_label == "Retail Trade") |>
  mutate(simplified_label = tolower(naics2017_label)) |>
  mutate(simplified_label = ifelse(grepl("stores", simplified_label), "Stores", simplified_label),
         simplified_label = ifelse(grepl("dealers", simplified_label), "Dealers", simplified_label),
         simplified_label = ifelse(grepl("markets", simplified_label), "Markets", simplified_label),
         simplified_label = ifelse(grepl("retailers", simplified_label), "Retailers", simplified_label),
         simplified_label = ifelse(grepl("stations", simplified_label), "Stations", simplified_label),
         simplified_label = ifelse(grepl("establishments", simplified_label), "Establishments", simplified_label),
         simplified_label = ifelse(grepl("houses", simplified_label), "Houses", simplified_label),
         simplified_label = ifelse(grepl("centers", simplified_label), "Centers", simplified_label),
         simplified_label = ifelse(grepl("operators", simplified_label), "Operators", simplified_label),
         simplified_label = ifelse(grepl("retail trade", simplified_label), "Retailers", simplified_label),
         simplified_label = ifelse(grepl("florists", simplified_label), "Stores", simplified_label)) |>
  group_by(simplified_label) |>
  summarize(total = sum(napcsdol)) |>
  mutate(prop = (total * 100 / sum(total)) + 0.35)
retail |>
  ggplot(
    aes(fill = simplified_label, values = prop)
  ) +
  geom_waffle(
    n_rows = 10,
    size = 1.5, 
    colour = "black",
    flip = FALSE,
  ) +
  scale_fill_manual(
    name = NULL,
    values = c("#0A9396", "#94D2BD", "#E9D8A6", "#EE9B00", "#CA7902", "#9B2226")
  ) +
  coord_equal() +
  labs(
    title = "Minnesota Retail Economic Sales",
    subtitle = "Proportion of Sales by Sub Sector",
    caption = "Source: U.S. Census Bureau 2017"
  ) +
  dark_theme_minimal(base_size = 14)+
  theme_enhance_waffle()

retail_rm <- retail |>
  filter(simplified_label != "Markets") |>
  filter(simplified_label != "Operators") |>
  filter(simplified_label != "Establishments")

prop_eco_napcsdol <- mn_eco_industry |>
  group_by(sector_label) |>
  summarize(total = sum(napcsdol)) |>
  mutate(prop = (total * 100 / sum(total)) + 0.35)

full_parts <- tibble(names = prop_eco_napcsdol$sector_label, vals = prop_eco_napcsdol$prop)

Iron Function

The iron function is used to combine 2 or more waffle charts without using a facet.

retail_parts <- tibble(names = retail_rm$simplified_label, vals = retail_rm$prop)

full_parts <- tibble(names = prop_eco_napcsdol$sector_label, vals = prop_eco_napcsdol$prop)

w1 <- waffle(full_parts,
       rows = 10,
       size = 2,
       pad = 0,
       colors = c("#0A9396", "#94D2BD", "#E9D8A6", "#EE9B00", "#CA7902", "#9B2226"),
       legend_pos = "right",
       title = "Minnesota Economic Sales Proportion by Sector")

w2 <- waffle(retail_parts, 
         rows = 10,
         size = 2,
         pad = 0,
         color = c("#461220", "#8c2f39", "#b23a48", "#fcb9b2", "#fed0bb", "#FFF1EB"),
         legend_pos = "right",
         title = "Retail Trade Economic Sales Proportion by Sub Sector")

iron(w1, w2)

The waffle package is very useful in showing simple proportions. Other than that, it is not very useful for more complex data visualizations.