-
-
Save keberwein/05f633a2be293b01b52bf05553d24b93 to your computer and use it in GitHub Desktop.
library(sp) | |
library(rgeos) | |
library(rgdal) | |
library(maptools) | |
library(dplyr) | |
library(leaflet) | |
library(scales) | |
### Begin data prep | |
# Grab air/water quality data from the EPA | |
url = "https://data.cdc.gov/api/views/cjae-szjv/rows.csv?accessType=DOWNLOAD" | |
dat <- read.csv(url, stringsAsFactors = FALSE) | |
# Colnames tolower | |
names(dat) <- tolower(names(dat)) | |
dat$countyname <- tolower(dat$countyname) | |
# Wide data set, subset only what we need. | |
county_dat <- subset(dat, measureid == "296", | |
select = c("reportyear","countyfips","statename", "countyname", "value", "unitname")) %>% | |
subset(reportyear==2011, select = c("countyfips", "value")) | |
# Rename columns to make for a clean df merge later. | |
colnames(county_dat) <- c("GEOID", "airqlty") | |
# Have to add leading zeos to any FIPS code that's less than 5 digits long to get a good match. | |
# I'm cheating by using C code. sprintf will work as well. | |
county_dat$GEOID <- formatC(county_dat$GEOID, width = 5, format = "d", flag = "0") | |
### End data prep | |
# Download county shape file from Tiger. | |
# https://www.census.gov/geo/maps-data/data/cbf/cbf_counties.html | |
us.map <- readOGR(dsn = ".", layer = "cb_2013_us_county_20m", stringsAsFactors = FALSE) | |
# Remove Alaska(2), Hawaii(15), Puerto Rico (72), Guam (66), Virgin Islands (78), American Samoa (60) | |
# Mariana Islands (69), Micronesia (64), Marshall Islands (68), Palau (70), Minor Islands (74) | |
us.map <- us.map[!us.map$STATEFP %in% c("02", "15", "72", "66", "78", "60", "69", | |
"64", "68", "70", "74"),] | |
# Make sure other outling islands are removed. | |
us.map <- us.map[!us.map$STATEFP %in% c("81", "84", "86", "87", "89", "71", "76", | |
"95", "79"),] | |
# Merge spatial df with downloade ddata. | |
leafmap <- merge(us.map, county_dat, by=c("GEOID")) | |
# Format popup data for leaflet map. | |
popup_dat <- paste0("<strong>County: </strong>", | |
leafmap$NAME, | |
"<br><strong>Value: </strong>", | |
leafmap$airqlty) | |
pal <- colorQuantile("YlOrRd", NULL, n = 20) | |
# Render final map in leaflet. | |
leaflet(data = leafmap) %>% addTiles() %>% | |
addPolygons(fillColor = ~pal(airqlty), | |
fillOpacity = 0.8, | |
color = "#BDBDC3", | |
weight = 1, | |
popup = popup_dat) | |
Hi! Thank you for posting this.
Having a small problem and I am new to plotting data such as this. I tried to recreate this as well as use manipulate and use my own data in RStudio and it is crashing. I also got an error about the colorQuantile for "YlOrRd" exceeding the limit of n (n=9 max) before the crash. Any immediate thoughts on why it could be crashing? The dataset you use is significantly larger than mine. Thanks!
Great tutorial. One question, I need to remove other states in the lower 48, how can can I determine the STATEFP id#? Thanks in advance.
when I run
# Download county shape file from Tiger.
# https://www.census.gov/geo/maps-data/data/cbf/cbf_counties.html
us.map <- readOGR(dsn = ".", layer = "cb_2013_us_county_20m", stringsAsFactors = FALSE)
I get: ```
Error in ogrInfo(dsn = dsn, layer = layer, encoding = encoding, use_iconv = use_iconv, :
Cannot open layer
I have the same error with @makis23
Great tutorial!. How do I only display the US map and not show other countries in the background?
It helped me a lot :-) Thanks