Tidy Tuesday: AIOE

Published

October 23, 2026

Code
library(tidyverse)
library(paletteer)
library(ggforce)
library(scales)

tuesdata <- tidytuesdayR::tt_load(2026, week = 42)

ai_salary_majors <- tuesdata$ai_salary_majors

#fields by number of graduates
fields_df <- ai_salary_majors %>%
  group_by(broad_field) %>%
  summarise(total_n_grads = sum(n_graduates, na.rm = TRUE)) %>%
  slice_max(total_n_grads, n = 6)


#plotting
scatter <- ggplot(ai_salary_majors %>% 
              filter(broad_field %in% fields_df$broad_field),
            aes(ai_exposure, median_starting_salary, color = broad_field)) +
  geom_point(size = 4) +
  xlim(-1.5, 1.5) +
  geom_mark_hull(aes(fill = broad_field),
                 concavity = 5,
                 alpha = 0.03,
                 size = 0.2) +
  scale_color_paletteer_d("MetBrewer::Klimt") +
  labs(x = "AI exposure",
       y = "Median starting salary")  +
  scale_y_continuous(labels = label_dollar())+
  theme_minimal(base_size = 16) +
  theme(legend.position = "none")
  
legend <- ggplot(fields_df,
                 aes(total_n_grads,
                     fct_reorder(broad_field, total_n_grads),
                     fill = broad_field)) +
  geom_bar(stat = "identity") +
  scale_fill_paletteer_d("MetBrewer::Klimt") +
  scale_x_continuous(labels = label_comma()) +
  labs(x = "Total graduates",
       y = NULL) +
  theme_minimal(base_size = 16) +
  theme(legend.position = "none")

#finish assembling using Figma