--- runtime: shiny output: html_document --- ```{r, include = FALSE} ## Stop server when the web page is closed. session <- getDefaultReactiveDomain() session$onSessionEnded(function() shiny::stopApp()) ``` ```{r, include = FALSE} ## Globals lausURL <- "http://www.stat.uiowa.edu/~luke/data/laus/laucntycur14-2018.txt" lausUS <- read.table(lausURL, col.names = c("LAUSAreaCode", "State", "County", "Title", "Period", "LaborForce", "Employed", "Unemployed", "UnempRate"), quote = '', sep = "|", skip = 6, stringsAsFactors = FALSE, strip.white = TRUE, fill = TRUE) footstart <- grep("------", lausUS$LAUSAreaCode) lausUS <- lausUS[1:(footstart - 1),] lausUS <- transform(lausUS, UnempRate = as.numeric(UnempRate), LaborForce = as.numeric(gsub(",", "", LaborForce)), Employed = as.numeric(gsub(",", "", Employed)), Unemployed = as.numeric(gsub(",", "", Unemployed)), Period = substr(Period, 1, 6)) lausIA <- subset(lausUS, State == 19) periods <- unique(lausIA$Period) UI <- lapply(periods, function(p) lausIA$UnempRate[lausIA$Period == p]) library(maps) library(RColorBrewer) palette <- brewer.pal(6, "Reds") ## Discreate version using map() showMap <- function(p) { urate <- UI[[p]] levs <- cut(urate, seq(0, 10, by = 2)) color <- palette[levs] map("county", "iowa", col = color, fill = TRUE) title(sprintf("Unemplotment Rates %s", periods[p])) legend("bottomleft", legend = levels(levs), fill = palette, cex = 0.6, bty = "n") } ## Continuous version using ggplot library(ggplot2) library(dplyr) giowa <- map_data("county", "iowa") fips_idx <- match(paste(giowa$region, giowa$subregion, sep = ","), sub(":,*", "", county.fips$polyname)) giowa$fips <- county.fips$fips[fips_idx] lausIA <- transform(lausIA, fips = 1000 * State + County) gUI <- as.data.frame(UI, col.names = periods) gUI$fips <- lausIA$fips[lausIA$Period == periods[1]] giowa_urate <- left_join(giowa, gUI) mapthm <- theme_bw() %+replace% theme(axis.line = element_blank(), axis.text = element_blank(), axis.ticks = element_blank(), axis.title = element_blank(), panel.background = element_blank(), panel.border = element_blank(), panel.grid = element_blank(), panel.spacing = unit(0, "lines"), plot.background = element_blank()) gshowMap <- function(p) { per <- periods[p] cidx <- 7 + p rate <- giowa_urate[[cidx]] ggplot(giowa_urate, aes(long, lat, group = group)) + geom_polygon(aes(fill = rate), color = "grey") + scale_fill_distiller(palette = "Reds", direction = 1, limits = c(0, 10)) + coord_map() + mapthm + ggtitle(sprintf("Unemplotment Rates %s", per)) } ``` ```{r echo = FALSE} ## Interface radioButtons("type", "Ploy Type", c("map", "ggplot")) sliderInput("period", "Period:", min = 1, max = length(periods), value = 1, step = 1, animate = TRUE) renderPlot( if (input$type == "map") showMap(input$period) else gshowMap(input$period)) ```