library(ggplot2) library(tidyr) library(dplyr) library(forcats) library(ggthemes) library(plotly) library(htmlwidgets) # 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)) d_total <- d %>% filter(State.Territory == "TOTAL") d_total_long <- d_total %>% pivot_longer(cols = !c("Date", "State.Territory", "source_name", "source_detail"), names_to = "lclass", values_to = "count") %>% # only keep rows with data so plots look right filter(!is.na(count)) #### Plots #### ##### 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", caption = "w1cdn.net", color = "Source") + theme(legend.position="bottom") ggsave("plots/total-over-time-y.png", width = 6, height = 4) p <- ggplotly() htmlwidgets::saveWidget(as_widget(p), selfcontained = TRUE, file = "plots/total-over-time-y.html") ##### Total over time, since 2000 ##### ggplot(data = d_total %>% filter(Date >= as.Date("2000-01-01")), aes(x = Date, y = Total, color = source_name)) + geom_line() + geom_point(size = 0.3) + scale_x_date(date_breaks = "1 years", date_minor_breaks = "3 months", date_labels = "%Y") + scale_y_continuous(labels = scales::comma) + theme_bw() + labs(title = "US Amateur Licenses since 2000", caption = "w1cdn.net", color = "Source") + theme(legend.position="bottom") ggsave("plots/total-over-time.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", 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", fill = "Class", caption = "w1cdn.net") + theme(legend.position="bottom") ggsave("plots/class-over-time-stacked.png", width = 6, height = 4)