library(ggplot2) library(tidyr) library(dplyr) library(forcats) library(ggthemes) # Read in data from Wayback Machine archive of http://www.arrl.org/fcc-license-counts d_raw <- read.csv("data/us ham radio licenses over time.csv") # What dates do we have? unique(d_raw$Date) # Clean up here if needed d <- d_raw %>% mutate(Date = as.Date(Date)) %>% # Drop Tech alone and leave Tech and Tech Plus select(-c(Tech, Tech.Plus)) %>% mutate(across(c(3:8), as.numeric)) d_total <- d %>% filter(State.Territory == "TOTAL") d_total_long <- d_total %>% pivot_longer(cols = 3:8, names_to = "lclass", values_to = "count") %>% # only keep rows with data so plots look right filter(!is.na(count)) #### Plots #### ##### Total over time ##### ggplot(data = d_total, aes(x = Date, y = Total, color = source_name)) + geom_line() + geom_point(size = 0.3) + scale_x_date(date_breaks = "10 years", date_minor_breaks = "1 year", date_labels = "%Y") + scale_y_continuous(labels = scales::comma) + theme_bw() + labs(title = "US Amateur Licenses", subtitle = "ARRL, AH0A", caption = "w1cdn.net", color = "Source") + theme(legend.position="bottom") ggsave("plots/total-over-time.png", width = 6, height = 4) ##### Total over time, y = 0 ##### ggplot(data = d_total, aes(x = Date, y = Total, color = source_name)) + geom_line() + geom_point(size = 0.3) + scale_x_date(date_breaks = "10 years", date_minor_breaks = "1 year", date_labels = "%Y") + scale_y_continuous(labels = scales::comma, limits = c(0, NA)) + theme_bw() + labs(title = "US Amateur Licenses", subtitle = "ARRL, AH0A", caption = "w1cdn.net", color = "Source") + theme(legend.position="bottom") ggsave("plots/total-over-time-y.png", width = 6, height = 4) ##### By license class ##### ggplot(data = d_total_long %>% filter(lclass != "Total"), aes(x = Date, y = count, color = fct_reorder2(lclass, Date, count))) + geom_line() + geom_point(size = 0.3) + scale_x_date(date_breaks = "10 years", date_minor_breaks = "1 year", date_labels = "%Y") + scale_y_continuous(labels = scales::comma) + scale_color_colorblind() + theme_bw() + labs(title = "US Amateur Licenses by Class", subtitle = "ARRL, AH0A", y = "Count", color = "Class", caption = "w1cdn.net") + theme(legend.position="bottom") ggsave("plots/class-over-time.png", width = 6, height = 4) ##### By license class, stacked ##### ggplot(data = d_total_long %>% filter(lclass != "Total"), aes(x = Date, y = count, fill = fct_reorder2(lclass, Date, count))) + geom_area() + scale_fill_colorblind() + scale_x_date(date_breaks = "10 years", date_minor_breaks = "1 year", date_labels = "%Y") + scale_y_continuous(labels = scales::comma) + theme_bw() + labs(title = "US Amateur Licenses by Class", subtitle = "ARRL, AH0A", fill = "Class", caption = "w1cdn.net") + theme(legend.position="bottom") ggsave("plots/class-over-time-stacked.png", width = 6, height = 4)