Skip to content

Commit 56d4624

Browse files
committed
Choro plots now support HRR and MSA.
1 parent e4fd80b commit 56d4624

File tree

1 file changed

+107
-128
lines changed

1 file changed

+107
-128
lines changed

R-packages/covidcast/R/plot.R

Lines changed: 107 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,16 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
110110
# Make background layer for MSA and HRR maps which are incomplete
111111
if ((attributes(x)$geo_type == "msa") |
112112
(attributes(x)$geo_type == "hrr")) {
113-
map_df = st_read('../data/shapefiles/state/cb_2019_us_state_5m.shp')
114-
background_crs = st_crs(map_df)
113+
map_df = sf::st_read('../data/shapefiles/state/cb_2019_us_state_5m.shp')
114+
background_crs = sf::st_crs(map_df)
115115
map_df$STATEFP <- as.character(map_df$STATEFP)
116116
map_df$is_alaska = map_df$STATEFP == '02'
117117
map_df$is_hawaii = map_df$STATEFP == '15'
118118
map_df$is_pr = map_df$STATEFP == '72'
119119
map_df$STATEFP <- as.numeric(map_df$STATEFP)
120120
map_df$is_state = map_df$STATEFP < 57
121+
map_df$color = missing_col
122+
121123
pr_df = map_df %>% filter(.$is_pr)
122124
hawaii_df = map_df %>% filter(.$is_hawaii)
123125
alaska_df = map_df %>% filter(.$is_alaska)
@@ -126,41 +128,38 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
126128
main_df = main_df %>% filter(!main_df$is_hawaii)
127129
main_df = main_df %>% filter(main_df$is_state)
128130

129-
main_df = st_transform(main_df, 102003)
130-
hawaii_df = st_transform(hawaii_df, 102007)
131-
alaska_df = st_transform(alaska_df, 102006)
132-
pr_df = st_transform(pr_df, 102003)
133-
134-
hawaii_shift = st_geometry(hawaii_df) + c(-1e+6, -2e+6)
135-
hawaii_df = st_set_geometry(hawaii_df, hawaii_shift)
136-
hawaii_df = st_set_crs(hawaii_df, 102003)
137-
138-
alaska_centroid = st_centroid(st_geometry(alaska_df))
139-
alaska_scale = (st_geometry(alaska_df) - alaska_centroid) * 0.35 + alaska_centroid
140-
alaska_df = st_set_geometry(alaska_df, alaska_scale)
141-
alaska_shift = st_geometry(alaska_df) + c(-2e+6, -2.6e+6)
142-
alaska_df = st_set_geometry(alaska_df, alaska_shift)
143-
alaska_df = st_set_crs(alaska_df, 102003)
144-
145-
pr_shift = st_geometry(pr_df) + c(-0.9e+6, 1e+6)
146-
pr_df = st_set_geometry(pr_df, pr_shift)
147-
r = -16 * pi / 180
148-
rotation = matrix(c(cos(r), sin(r), -sin(r), cos(r)), nrow = 2, ncol = 2)
149-
pr_centroid = pr_df %>% st_geometry %>% st_centroid
150-
pr_rotate = (st_geometry(pr_df) - pr_centroid) * rotation + pr_centroid
151-
pr_df = st_set_crs(pr_df, 102003)
131+
main_df = sf::st_transform(main_df, 102003)
132+
hawaii_df = sf::st_transform(hawaii_df, 102007)
133+
alaska_df = sf::st_transform(alaska_df, 102006)
134+
pr_df = sf::st_transform(pr_df, 102003)
152135

153-
main_geo = main_df$STATEFP
154-
main_col = rep(missing_col, length(main_geo))
136+
hawaii_shift = sf::st_geometry(hawaii_df) + c(-1e+6, -2e+6)
137+
hawaii_df = sf::st_set_geometry(hawaii_df, hawaii_shift)
138+
hawaii_df = sf::st_set_crs(hawaii_df, 102003)
155139

156-
hawaii_geo = hawaii_df$STATEFP
157-
hawaii_col = rep(missing_col, length(hawaii_geo))
140+
alaska_centroid = sf::st_centroid(sf::st_geometry(alaska_df))
141+
print('hi')
142+
alaska_scale = (sf::st_geometry(alaska_df) - alaska_centroid) * 0.35 + alaska_centroid
143+
alaska_df = sf::st_set_geometry(alaska_df, alaska_scale)
144+
alaska_shift = sf::st_geometry(alaska_df) + c(-2e+6, -2.6e+6)
145+
alaska_df = sf::st_set_geometry(alaska_df, alaska_shift)
146+
alaska_df = sf::st_set_crs(alaska_df, 102003)
158147

159-
alaska_geo = alaska_df$STATEFP
160-
alaska_col = rep(missing_col, length(alaska_geo))
148+
print('hi')
161149

162-
pr_geo = pr_df$STATEFP
163-
pr_col = rep(missing_col, length(pr_geo))
150+
pr_shift = sf::st_geometry(pr_df) + c(-0.9e+6, 1e+6)
151+
pr_df = sf::st_set_geometry(pr_df, pr_shift)
152+
r = -16 * pi / 180
153+
rotation = matrix(c(cos(r), sin(r), -sin(r), cos(r)), nrow = 2, ncol = 2)
154+
pr_centroid = sf::st_centroid(sf::st_geometry(pr_df))
155+
pr_rotate = (sf::st_geometry(pr_df) - pr_centroid) * rotation + pr_centroid
156+
pr_df = sf::st_set_geometry(pr_df, pr_rotate)
157+
pr_df = sf::st_set_crs(pr_df, 102003)
158+
159+
main_col = main_df$color
160+
hawaii_col = hawaii_df$color
161+
alaska_col = alaska_df$color
162+
pr_col = pr_df$color
164163

165164
aes = ggplot2::aes
166165
geom_args = list()
@@ -217,7 +216,7 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
217216
}
218217

219218
else if (attributes(x)$geo_type == "msa") {
220-
map_df = st_read('../data/shapefiles/msa/cb_2019_us_cbsa_5m.shp')
219+
map_df = sf::st_read('../data/shapefiles/msa/cb_2019_us_cbsa_5m.shp')
221220
map_df = map_df %>% filter(map_df$LSAD == 'M1') # only get metro and not micropolitan areas
222221
if (length(include) > 0) {
223222
map_df = map_df %>% filter(map_df$GEOID %in% include)
@@ -226,71 +225,64 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
226225
map_df$is_alaska = substr(map_df$NAME, nchar(map_df$NAME) - 1, nchar(map_df$NAME)) == 'AK'
227226
map_df$is_hawaii = substr(map_df$NAME, nchar(map_df$NAME) - 1, nchar(map_df$NAME)) == 'HI'
228227
map_df$is_pr = substr(map_df$NAME, nchar(map_df$NAME) - 1, nchar(map_df$NAME)) == 'PR'
228+
map_df$color = ifelse(map_df$GEOID %in% geo,
229+
col_fun(val[map_df$GEOID]),
230+
missing_col)
231+
229232
pr_df = map_df %>% filter(map_df$is_pr)
230233
hawaii_df = map_df %>% filter(map_df$is_hawaii)
231234
alaska_df = map_df %>% filter(map_df$is_alaska)
232235
main_df = map_df %>% filter(!map_df$is_alaska)
233236
main_df = main_df %>% filter(!main_df$is_hawaii)
234237
main_df = main_df %>% filter(!main_df$is_pr)
235238

236-
main_df = st_transform(main_df, 102003)
237-
hawaii_df = st_transform(hawaii_df, 102007)
238-
alaska_df = st_transform(alaska_df, 102006)
239-
pr_df = st_transform(pr_df, 102003)
239+
main_df = sf::st_transform(main_df, 102003)
240+
hawaii_df = sf::st_transform(hawaii_df, 102007)
241+
alaska_df = sf::st_transform(alaska_df, 102006)
242+
pr_df = sf::st_transform(pr_df, 102003)
240243

241-
hawaii_shift = st_geometry(hawaii_df) + c(-1e+6, -2e+6)
242-
hawaii_df = st_set_geometry(hawaii_df, hawaii_shift)
243-
hawaii_df = st_set_crs(hawaii_df, 102003)
244+
hawaii_shift = sf::st_geometry(hawaii_df) + c(-1e+6, -2e+6)
245+
hawaii_df = sf::st_set_geometry(hawaii_df, hawaii_shift)
246+
hawaii_df = sf::st_set_crs(hawaii_df, 102003)
244247

245248
# Note centroid is centroid for entire state (defined for background)
246-
alaska_scale = (st_geometry(alaska_df) - alaska_centroid) * 0.35 + alaska_centroid
247-
alaska_df = st_set_geometry(alaska_df, alaska_scale)
248-
alaska_shift = st_geometry(alaska_df) + c(-2e+6, -2.6e+6)
249-
alaska_df = st_set_geometry(alaska_df, alaska_shift)
250-
alaska_df = st_set_crs(alaska_df, 102003)
251-
252-
pr_shift = st_geometry(pr_df) + c(-0.9e+6, 1e+6)
253-
pr_df = st_set_geometry(pr_df, pr_shift)
249+
alaska_scale = (sf::st_geometry(alaska_df) - alaska_centroid) * 0.35 + alaska_centroid
250+
alaska_df = sf::st_set_geometry(alaska_df, alaska_scale)
251+
alaska_shift = sf::st_geometry(alaska_df) + c(-2e+6, -2.6e+6)
252+
alaska_df = sf::st_set_geometry(alaska_df, alaska_shift)
253+
alaska_df = sf::st_set_crs(alaska_df, 102003)
254+
255+
pr_shift = sf::st_geometry(pr_df) + c(-0.9e+6, 1e+6)
256+
pr_df = sf::st_set_geometry(pr_df, pr_shift)
254257
r = -16 * pi / 180
255258
rotation = matrix(c(cos(r), sin(r), -sin(r), cos(r)), nrow = 2, ncol = 2)
256259
# Note centroid is same as for entire territory (defined for background)
257-
pr_rotate = (st_geometry(pr_df) - pr_centroid) * rotation + pr_centroid
258-
pr_df = st_set_crs(pr_df, 102003)
259-
260-
main_geo = main_df$GEOID
261-
main_col = rep(missing_col, length(main_geo))
262-
main_obs = main_geo[main_geo %in% geo]
263-
main_col[main_geo %in% geo] = col_fun(val[main_obs])
264-
265-
hawaii_geo = hawaii_df$GEOID
266-
hawaii_col = rep(missing_col, length(hawaii_geo))
267-
hawaii_obs = hawaii_geo[hawaii_geo %in% geo]
268-
hawaii_col[hawaii_geo %in% geo] = col_fun(val[hawaii_obs])
269-
270-
alaska_geo = alaska_df$GEOID
271-
alaska_col = rep(missing_col, length(alaska_geo))
272-
alaska_obs = alaska_geo[alaska_geo %in% geo]
273-
alaska_col[alaska_geo %in% geo] = col_fun(val[alaska_obs])
274-
275-
pr_geo = pr_df$GEOID
276-
pr_col = rep(missing_col, length(pr_geo))
277-
pr_obs = pr_geo[pr_geo %in% geo]
278-
pr_col[pr_geo %in% geo] = col_fun(val[pr_obs])
260+
pr_rotate = (sf::st_geometry(pr_df) - pr_centroid) * rotation + pr_centroid
261+
pr_df = sf::st_set_geometry(pr_df, pr_rotate)
262+
pr_df = sf::st_set_crs(pr_df, 102003)
263+
264+
main_col = main_df$color
265+
hawaii_col = hawaii_df$color
266+
alaska_col = alaska_df$color
267+
pr_geo = pr_df$color
279268
}
280269

281270
else if (attributes(x)$geo_type == "hrr") {
282-
map_df = st_read('../data/shapefiles/hrr/geo_export_ad86cff5-e5ed-432e-9ec2-2ce8732099ee.shp')
271+
map_df = sf::st_read('../data/shapefiles/hrr/geo_export_ad86cff5-e5ed-432e-9ec2-2ce8732099ee.shp')
283272
if (length(include) > 0) {
284273
map_df = map_df %>% filter(map_df$hrr_num %in% include)
285274
}
286-
map_df = st_transform(map_df, background_crs)
287-
hrr_shift = st_geometry(map_df) + c(0, -0.185)
288-
map_df = st_set_geometry(map_df, hrr_shift)
289-
map_df = st_set_crs(map_df, background_crs)
275+
map_df = sf::st_transform(map_df, background_crs)
276+
hrr_shift = sf::st_geometry(map_df) + c(0, -0.185)
277+
map_df = sf::st_set_geometry(map_df, hrr_shift)
278+
map_df = sf::st_set_crs(map_df, background_crs)
290279
map_df$hrr_name <- as.character(map_df$hrr_name)
291280
map_df$is_alaska = substr(map_df$hrr_name, 1, 2) == 'AK'
292-
map_df$is_hawaii = substr(map_df$hrr_name, 1, 1) == 'HI'
281+
map_df$is_hawaii = substr(map_df$hrr_name, 1, 2) == 'HI'
293282
map_df$is_pr = substr(map_df$hrr_name, 1, 2) == 'PR'
283+
map_df$color = ifelse(map_df$hrr_num %in% geo,
284+
col_fun(val[map_df$hrr_num]),
285+
missing_col)
294286

295287
pr_df = map_df %>% filter(map_df$is_pr)
296288
hawaii_df = map_df %>% filter(map_df$is_hawaii)
@@ -300,52 +292,35 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
300292
main_df = main_df %>% filter(!main_df$is_hawaii)
301293
main_df = main_df %>% filter(!main_df$is_pr)
302294

303-
main_df = st_transform(main_df, 102003)
304-
hawaii_df = st_transform(hawaii_df, 102007)
305-
alaska_df = st_transform(alaska_df, 102006)
306-
pr_df = st_transform(pr_df, 102003)
295+
main_df = sf::st_transform(main_df, 102003)
296+
hawaii_df = sf::st_transform(hawaii_df, 102007)
297+
alaska_df = sf::st_transform(alaska_df, 102006)
298+
pr_df = sf::st_transform(pr_df, 102003)
307299

308-
hawaii_shift = st_geometry(hawaii_df) + c(-1e+6, -2e+6)
309-
hawaii_df = st_set_geometry(hawaii_df, hawaii_shift)
310-
hawaii_df = st_set_crs(hawaii_df, 102003)
300+
hawaii_shift = sf::st_geometry(hawaii_df) + c(-1e+6, -2e+6)
301+
hawaii_df = sf::st_set_geometry(hawaii_df, hawaii_shift)
302+
hawaii_df = sf::st_set_crs(hawaii_df, 102003)
311303

312304
# Note centroid is centroid for entire state (defined for background)
313-
#alaska_scale = (st_geometry(alaska_df) - alaska_centroid) * 0.35 + alaska_centroid
314-
#alaska_df = st_set_geometry(alaska_df, alaska_scale)
315-
#alaska_shift = st_geometry(alaska_df) + c(-2e+6, -2.6e+6)
316-
#alaska_df = st_set_geometry(alaska_df, alaska_shift)
317-
alaska_df = st_set_crs(alaska_df, 102003)
318-
319-
pr_shift = st_geometry(pr_df) + c(-0.9e+6, 1e+6)
320-
pr_df = st_set_geometry(pr_df, pr_shift)
305+
alaska_scale = (sf::st_geometry(alaska_df) - alaska_centroid) * 0.35 + alaska_centroid
306+
alaska_df = sf::st_set_geometry(alaska_df, alaska_scale)
307+
alaska_shift = sf::st_geometry(alaska_df) + c(-2e+6, -2.6e+6)
308+
alaska_df = sf::st_set_geometry(alaska_df, alaska_shift)
309+
alaska_df = sf::st_set_crs(alaska_df, 102003)
310+
311+
pr_shift = sf::st_geometry(pr_df) + c(-0.9e+6, 1e+6)
312+
pr_df = sf::st_set_geometry(pr_df, pr_shift)
321313
r = -16 * pi / 180
322314
rotation = matrix(c(cos(r), sin(r), -sin(r), cos(r)), nrow = 2, ncol = 2)
323315
# Note centroid is same as for entire territory (defined for background)
324-
pr_rotate = (st_geometry(pr_df) - pr_centroid) * rotation + pr_centroid
325-
pr_df = st_set_crs(pr_df, 102003)
326-
327-
main_geo = main_df$hrr_num
328-
main_col = rep(missing_col, length(main_geo))
329-
main_obs = main_geo[main_geo %in% geo]
330-
main_col[main_geo %in% geo] = col_fun(val[main_obs])
331-
332-
hawaii_geo = hawaii_df$hrr_num
333-
hawaii_col = rep(missing_col, length(hawaii_geo))
334-
hawaii_obs = hawaii_geo[hawaii_geo %in% geo]
335-
hawaii_col[hawaii_geo %in% geo] = col_fun(val[hawaii_obs])
336-
337-
print('yo')
338-
alaska_geo = alaska_df$hrr_num
339-
alaska_col = rep(missing_col, length(alaska_geo))
340-
alaska_obs = alaska_geo[alaska_geo %in% geo]
341-
print(alaska_obs)
342-
alaska_col[alaska_geo %in% geo] = col_fun(val[alaska_obs])
343-
344-
pr_geo = pr_df$hrr_num
345-
pr_col = rep(missing_col, length(pr_geo))
346-
pr_obs = pr_geo[pr_geo %in% geo]
347-
pr_col[pr_geo %in% geo] = col_fun(val[pr_obs])
348-
316+
pr_rotate = (sf::st_geometry(pr_df) - pr_centroid) * rotation + pr_centroid
317+
pr_df = sf::st_set_geometry(pr_df, pr_rotate)
318+
pr_df = sf::st_set_crs(pr_df, 102003)
319+
320+
main_col = main_df$color
321+
hawaii_col = hawaii_df$color
322+
alaska_col = alaska_df$color
323+
pr_col = pr_df$color
349324
}
350325

351326
# Create the polygon layer
@@ -372,19 +347,18 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
372347

373348
geom_args$fill = main_col
374349
geom_args$data = main_df
375-
polygon_layer = do.call(ggplot2::geom_sf, geom_args)
350+
main_layer = do.call(ggplot2::geom_sf, geom_args)
376351
geom_args$fill = pr_col
377352
geom_args$data = pr_df
378353
pr_layer = do.call(ggplot2::geom_sf, geom_args)
379354
geom_args$fill = hawaii_col
380355
geom_args$data = hawaii_df
381356
hawaii_layer = do.call(ggplot2::geom_sf, geom_args)
382-
#geom_args$fill = alaska_col
383-
#geom_args$data = alaska_df
384-
#alaska_layer = do.call(ggplot2::geom_sf, geom_args)
357+
geom_args$fill = alaska_col
358+
geom_args$data = alaska_df
359+
alaska_layer = do.call(ggplot2::geom_sf, geom_args)
385360
coord_layer = do.call(ggplot2::coord_sf, coord_args)
386361
}
387-
388362

389363
# For intensity and continuous color scale, create a legend layer
390364
if (!direction && is.null(breaks)) {
@@ -456,12 +430,17 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
456430
guide = guide)
457431
}
458432
# Put it all together and return
459-
return(ggplot2::ggplot() + back_main_layer + back_pr_layer + back_hawaii_layer + back_alaska_layer +
460-
polygon_layer +
461-
pr_layer +
462-
#hawaii_layer + alaska_layer +
463-
coord_layer +
464-
title_layer + hidden_layer + scale_layer + theme_layer)
433+
if ((attributes(x)$geo_type == "msa") |
434+
(attributes(x)$geo_type == "hrr")) {
435+
return(ggplot2::ggplot() +
436+
back_main_layer + back_pr_layer + back_hawaii_layer + back_alaska_layer +
437+
main_layer + pr_layer + alaska_layer + hawaii_layer + coord_layer +
438+
title_layer + hidden_layer + scale_layer + theme_layer)
439+
}
440+
else {
441+
return(ggplot2::ggplot() + polygon_layer + coord_layer +
442+
title_layer + hidden_layer + scale_layer + theme_layer)
443+
}
465444
}
466445

467446
# Plot a bubble map of a covidcast_signal object.

0 commit comments

Comments
 (0)