@@ -252,60 +252,38 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
252252 val = df $ val
253253 geo = df $ geo
254254 names(val ) = geo
255-
255+
256256 # Make background layer for MSA and HRR maps which are incomplete
257257 if ((attributes(x )$ metadata $ geo_type == " msa" ) ||
258258 (attributes(x )$ metadata $ geo_type == " hrr" )) {
259259 map_df = sf :: st_read(system.file(
260- " shapefiles/state" ,
261- " cb_2019_us_state_5m.shp" ,
262- package = " covidcast" ))
260+ " shapefiles/state/cb_2019_us_state_5m.shp" ,
261+ package = " covidcast" ))
263262 background_crs = sf :: st_crs(map_df )
264263 map_df $ STATEFP <- as.character(map_df $ STATEFP )
265- map_df $ is_alaska = map_df $ STATEFP == ' 02'
266- map_df $ is_hawaii = map_df $ STATEFP == ' 15'
267- map_df $ is_pr = map_df $ STATEFP == ' 72'
268- map_df $ STATEFP <- as.numeric(map_df $ STATEFP )
269- map_df $ is_state = map_df $ STATEFP < 57
270- map_df $ color = missing_col
271-
272- pr_df = map_df %> % filter(. $ is_pr )
273- hawaii_df = map_df %> % filter(. $ is_hawaii )
274- alaska_df = map_df %> % filter(. $ is_alaska )
275-
276- main_df = map_df %> % filter(! map_df $ is_alaska )
277- main_df = main_df %> % filter(! main_df $ is_hawaii )
278- main_df = main_df %> % filter(main_df $ is_state )
279-
280- main_df = sf :: st_transform(main_df , 102003 )
281- hawaii_df = sf :: st_transform(hawaii_df , 102007 )
282- alaska_df = sf :: st_transform(alaska_df , 102006 )
283- pr_df = sf :: st_transform(pr_df , 102003 )
284-
285- hawaii_shift = sf :: st_geometry(hawaii_df ) + c(- 1e+6 , - 2e+6 )
286- hawaii_df = sf :: st_set_geometry(hawaii_df , hawaii_shift )
287- hawaii_df = sf :: st_set_crs(hawaii_df , 102003 )
288-
289- alaska_centroid = sf :: st_centroid(sf :: st_geometry(alaska_df ))
290- alaska_scale = (sf :: st_geometry(alaska_df ) - alaska_centroid ) * 0.35 + alaska_centroid
291- alaska_df = sf :: st_set_geometry(alaska_df , alaska_scale )
292- alaska_shift = sf :: st_geometry(alaska_df ) + c(- 2e+6 , - 2.6e+6 )
293- alaska_df = sf :: st_set_geometry(alaska_df , alaska_shift )
294- alaska_df = sf :: st_set_crs(alaska_df , 102003 )
295-
296- pr_shift = sf :: st_geometry(pr_df ) + c(- 0.9e+6 , 1e+6 )
297- pr_df = sf :: st_set_geometry(pr_df , pr_shift )
298- r = - 16 * pi / 180
299- rotation = matrix (c(cos(r ), sin(r ), - sin(r ), cos(r )), nrow = 2 , ncol = 2 )
300- pr_centroid = sf :: st_centroid(sf :: st_geometry(pr_df ))
301- pr_rotate = (sf :: st_geometry(pr_df ) - pr_centroid ) * rotation + pr_centroid
302- pr_df = sf :: st_set_geometry(pr_df , pr_rotate )
303- pr_df = sf :: st_set_crs(pr_df , 102003 )
264+ map_df = map_df %> % dplyr :: mutate(
265+ is_alaska = STATEFP == ' 02' ,
266+ is_hawaii = STATEFP == ' 15' ,
267+ is_pr = STATEFP == ' 72' ,
268+ is_state = as.numeric(STATEFP ) < 57 ,
269+ color = missing_col )
270+
271+ # For alaska and pr, set centroids here so same centroid is
272+ # used for every map layer.
273+ alaska_centroid = get_alaska_centroid(map_df )
274+ pr_centroid = get_pr_centroid(map_df )
275+
276+ # Need to filter out territories such as Guam, American Samoa, etc.
277+ main_df = map_df %> % dplyr :: filter(. $ is_state ) %> % shift_main(. )
278+
279+ hawaii_df = shift_hawaii(map_df )
280+ alaska_df = shift_alaska(map_df , alaska_centroid )
281+ pr_df = shift_pr(map_df , pr_centroid )
304282
305283 main_col = main_df $ color
306284 hawaii_col = hawaii_df $ color
307285 alaska_col = alaska_df $ color
308- pr_col = pr_df $ color
286+ pr_col = pr_df $ color
309287
310288 aes = ggplot2 :: aes
311289 geom_args = list ()
@@ -363,52 +341,23 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
363341
364342 else if (attributes(x )$ metadata $ geo_type == " msa" ) {
365343 map_df = sf :: st_read(system.file(
366- " shapefiles/msa" ,
367- " cb_2019_us_cbsa_5m.shp" ,
368- package = " covidcast" ))
369- map_df = map_df %> % filter(map_df $ LSAD == ' M1' ) # only get metro and not micropolitan areas
344+ " shapefiles/msa/cb_2019_us_cbsa_5m.shp" ,
345+ package = " covidcast" ))
346+ map_df = map_df %> % dplyr :: filter(map_df $ LSAD == ' M1' ) # only get metro and not micropolitan areas
370347 if (length(include ) > 0 ) {
371- map_df = map_df %> % filter(map_df $ GEOID %in% include )
348+ map_df = map_df %> % dplyr :: filter(map_df $ GEOID %in% include )
372349 }
373350 map_df $ NAME <- as.character(map_df $ NAME )
374- map_df $ is_alaska = substr(map_df $ NAME , nchar(map_df $ NAME ) - 1 , nchar(map_df $ NAME )) == ' AK'
375- map_df $ is_hawaii = substr(map_df $ NAME , nchar(map_df $ NAME ) - 1 , nchar(map_df $ NAME )) == ' HI'
376- map_df $ is_pr = substr(map_df $ NAME , nchar(map_df $ NAME ) - 1 , nchar(map_df $ NAME )) == ' PR'
377- map_df $ color = ifelse(map_df $ GEOID %in% geo ,
378- col_fun(val [map_df $ GEOID ]),
379- missing_col )
380-
381- pr_df = map_df %> % filter(map_df $ is_pr )
382- hawaii_df = map_df %> % filter(map_df $ is_hawaii )
383- alaska_df = map_df %> % filter(map_df $ is_alaska )
384- main_df = map_df %> % filter(! map_df $ is_alaska )
385- main_df = main_df %> % filter(! main_df $ is_hawaii )
386- main_df = main_df %> % filter(! main_df $ is_pr )
387-
388- main_df = sf :: st_transform(main_df , 102003 )
389- hawaii_df = sf :: st_transform(hawaii_df , 102007 )
390- alaska_df = sf :: st_transform(alaska_df , 102006 )
391- pr_df = sf :: st_transform(pr_df , 102003 )
392-
393- hawaii_shift = sf :: st_geometry(hawaii_df ) + c(- 1e+6 , - 2e+6 )
394- hawaii_df = sf :: st_set_geometry(hawaii_df , hawaii_shift )
395- hawaii_df = sf :: st_set_crs(hawaii_df , 102003 )
396-
397- # Note centroid is centroid for entire state (defined for background)
398- alaska_scale = (sf :: st_geometry(alaska_df ) - alaska_centroid ) * 0.35 + alaska_centroid
399- alaska_df = sf :: st_set_geometry(alaska_df , alaska_scale )
400- alaska_shift = sf :: st_geometry(alaska_df ) + c(- 2e+6 , - 2.6e+6 )
401- alaska_df = sf :: st_set_geometry(alaska_df , alaska_shift )
402- alaska_df = sf :: st_set_crs(alaska_df , 102003 )
403-
404- pr_shift = sf :: st_geometry(pr_df ) + c(- 0.9e+6 , 1e+6 )
405- pr_df = sf :: st_set_geometry(pr_df , pr_shift )
406- r = - 16 * pi / 180
407- rotation = matrix (c(cos(r ), sin(r ), - sin(r ), cos(r )), nrow = 2 , ncol = 2 )
408- # Note centroid is same as for entire territory (defined for background)
409- pr_rotate = (sf :: st_geometry(pr_df ) - pr_centroid ) * rotation + pr_centroid
410- pr_df = sf :: st_set_geometry(pr_df , pr_rotate )
411- pr_df = sf :: st_set_crs(pr_df , 102003 )
351+ map_df = map_df %> % dplyr :: mutate(
352+ is_alaska = substr(NAME , nchar(NAME ) - 1 , nchar(NAME )) == ' AK' ,
353+ is_hawaii = substr(NAME , nchar(NAME ) - 1 , nchar(NAME )) == ' HI' ,
354+ is_pr = substr(NAME , nchar(NAME ) - 1 , nchar(NAME )) == ' PR' ,
355+ color = ifelse(GEOID %in% geo , col_fun(val [GEOID ]), missing_col ))
356+
357+ main_df = shift_main(map_df )
358+ hawaii_df = shift_hawaii(map_df )
359+ alaska_df = shift_alaska(map_df , alaska_centroid )
360+ pr_df = shift_pr(map_df , pr_centroid )
412361
413362 main_col = main_df $ color
414363 hawaii_col = hawaii_df $ color
@@ -418,56 +367,26 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
418367
419368 else if (attributes(x )$ metadata $ geo_type == " hrr" ) {
420369 map_df = sf :: st_read(system.file(
421- " shapefiles/hrr" ,
422- " geo_export_ad86cff5-e5ed-432e-9ec2-2ce8732099ee.shp" ,
423- package = " covidcast" ))
370+ " shapefiles/hrr/geo_export_ad86cff5-e5ed-432e-9ec2-2ce8732099ee.shp" ,
371+ package = " covidcast" ))
424372 if (length(include ) > 0 ) {
425- map_df = map_df %> % filter(map_df $ hrr_num %in% include )
373+ map_df = map_df %> % filter(. $ hrr_num %in% include )
426374 }
427375 map_df = sf :: st_transform(map_df , background_crs )
428376 hrr_shift = sf :: st_geometry(map_df ) + c(0 , - 0.185 )
429377 map_df = sf :: st_set_geometry(map_df , hrr_shift )
430378 map_df = sf :: st_set_crs(map_df , background_crs )
431379 map_df $ hrr_name <- as.character(map_df $ hrr_name )
432- map_df $ is_alaska = substr(map_df $ hrr_name , 1 , 2 ) == ' AK'
433- map_df $ is_hawaii = substr(map_df $ hrr_name , 1 , 2 ) == ' HI'
434- map_df $ is_pr = substr(map_df $ hrr_name , 1 , 2 ) == ' PR'
435- map_df $ color = ifelse(map_df $ hrr_num %in% geo ,
436- col_fun(val [map_df $ hrr_num ]),
437- missing_col )
438-
439- pr_df = map_df %> % filter(map_df $ is_pr )
440- hawaii_df = map_df %> % filter(map_df $ is_hawaii )
441- alaska_df = map_df %> % filter(map_df $ is_alaska )
442-
443- main_df = map_df %> % filter(! map_df $ is_alaska )
444- main_df = main_df %> % filter(! main_df $ is_hawaii )
445- main_df = main_df %> % filter(! main_df $ is_pr )
446-
447- main_df = sf :: st_transform(main_df , 102003 )
448- hawaii_df = sf :: st_transform(hawaii_df , 102007 )
449- alaska_df = sf :: st_transform(alaska_df , 102006 )
450- pr_df = sf :: st_transform(pr_df , 102003 )
451-
452- hawaii_shift = sf :: st_geometry(hawaii_df ) + c(- 1e+6 , - 2e+6 )
453- hawaii_df = sf :: st_set_geometry(hawaii_df , hawaii_shift )
454- hawaii_df = sf :: st_set_crs(hawaii_df , 102003 )
455-
456- # Note centroid is centroid for entire state (defined for background)
457- alaska_scale = (sf :: st_geometry(alaska_df ) - alaska_centroid ) * 0.35 + alaska_centroid
458- alaska_df = sf :: st_set_geometry(alaska_df , alaska_scale )
459- alaska_shift = sf :: st_geometry(alaska_df ) + c(- 2e+6 , - 2.6e+6 )
460- alaska_df = sf :: st_set_geometry(alaska_df , alaska_shift )
461- alaska_df = sf :: st_set_crs(alaska_df , 102003 )
462-
463- pr_shift = sf :: st_geometry(pr_df ) + c(- 0.9e+6 , 1e+6 )
464- pr_df = sf :: st_set_geometry(pr_df , pr_shift )
465- r = - 16 * pi / 180
466- rotation = matrix (c(cos(r ), sin(r ), - sin(r ), cos(r )), nrow = 2 , ncol = 2 )
467- # Note centroid is same as for entire territory (defined for background)
468- pr_rotate = (sf :: st_geometry(pr_df ) - pr_centroid ) * rotation + pr_centroid
469- pr_df = sf :: st_set_geometry(pr_df , pr_rotate )
470- pr_df = sf :: st_set_crs(pr_df , 102003 )
380+ map_df = map_df %> % dplyr :: mutate(
381+ is_alaska = substr(hrr_name , 1 , 2 ) == ' AK' ,
382+ is_hawaii = substr(hrr_name , 1 , 2 ) == ' HI' ,
383+ is_pr = substr(hrr_name , 1 , 2 ) == ' PR' ,
384+ color = ifelse(hrr_num %in% geo , col_fun(val [hrr_num ]), missing_col ))
385+
386+ main_df = shift_main(map_df )
387+ hawaii_df = shift_hawaii(map_df )
388+ alaska_df = shift_alaska(map_df , alaska_centroid )
389+ pr_df = shift_pr(map_df , pr_centroid )
471390
472391 main_col = main_df $ color
473392 hawaii_col = hawaii_df $ color
@@ -487,7 +406,7 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
487406 geom_args $ data = map_df
488407 polygon_layer = do.call(ggplot2 :: geom_polygon , geom_args )
489408 coord_layer = ggplot2 :: coord_equal()
490- }
409+ }
491410 else if (attributes(x )$ metadata $ geo_type == " msa" ||
492411 attributes(x )$ metadata $ geo_type == " hrr" ) {
493412 aes = ggplot2 :: aes
@@ -510,7 +429,7 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
510429 geom_args $ data = alaska_df
511430 alaska_layer = do.call(ggplot2 :: geom_sf , geom_args )
512431 coord_layer = do.call(ggplot2 :: coord_sf , coord_args )
513- }
432+ }
514433
515434 # For continuous color scale, create a legend layer
516435 if (is.null(breaks )) {
@@ -567,7 +486,7 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
567486 back_main_layer + back_pr_layer + back_hawaii_layer + back_alaska_layer +
568487 main_layer + pr_layer + alaska_layer + hawaii_layer + coord_layer +
569488 title_layer + hidden_layer + scale_layer + theme_layer )
570- }
489+ }
571490 else {
572491 return (ggplot2 :: ggplot() + polygon_layer + coord_layer +
573492 title_layer + hidden_layer + scale_layer + theme_layer )
@@ -791,3 +710,63 @@ plot_line = function(x, range = NULL, title = NULL, params = list()) {
791710 return (ggplot2 :: ggplot(aes(x = time_value ), data = df ) +
792711 line_layer + ribbon_layer + lim_layer + label_layer + theme_layer )
793712}
713+
714+
715+ get_pr_centroid = function (map_df ){
716+ pr_df = map_df %> % dplyr :: filter(. $ is_pr ) %> % sf :: st_transform(. , 102003 )
717+ pr_centroid = sf :: st_centroid(sf :: st_geometry(pr_df ))
718+ return (pr_centroid )
719+ }
720+
721+
722+ shift_pr = function (map_df , pr_centroid ){
723+ pr_df = map_df %> % dplyr :: filter(. $ is_pr )
724+ pr_df = sf :: st_transform(pr_df , 102003 )
725+ pr_shift = sf :: st_geometry(pr_df ) + c(- 0.9e+6 , 1e+6 )
726+ pr_df = sf :: st_set_geometry(pr_df , pr_shift )
727+ r = - 16 * pi / 180
728+ rotation = matrix (c(cos(r ), sin(r ), - sin(r ), cos(r )), nrow = 2 , ncol = 2 )
729+ pr_rotate = (sf :: st_geometry(pr_df ) - pr_centroid ) * rotation + pr_centroid
730+ pr_df = sf :: st_set_geometry(pr_df , pr_rotate )
731+ pr_df = sf :: st_set_crs(pr_df , 102003 )
732+ return (pr_df )
733+ }
734+
735+
736+ get_alaska_centroid = function (map_df ){
737+ alaska_df = map_df %> % dplyr :: filter(. $ is_alaska ) %> % sf :: st_transform(. , 102006 )
738+ alaska_centroid = sf :: st_centroid(sf :: st_geometry(alaska_df ))
739+ return (alaska_centroid )
740+ }
741+
742+
743+ shift_alaska = function (map_df , alaska_centroid ){
744+ alaska_df = map_df %> % dplyr :: filter(. $ is_alaska )
745+ alaska_df = sf :: st_transform(alaska_df , 102006 )
746+ alaska_scale = (sf :: st_geometry(alaska_df ) - alaska_centroid ) * 0.35 + alaska_centroid
747+ alaska_df = sf :: st_set_geometry(alaska_df , alaska_scale )
748+ alaska_shift = sf :: st_geometry(alaska_df ) + c(- 2e+6 , - 2.6e+6 )
749+ alaska_df = sf :: st_set_geometry(alaska_df , alaska_shift )
750+ alaska_df = sf :: st_set_crs(alaska_df , 102003 )
751+ return (alaska_df )
752+ }
753+
754+
755+ shift_hawaii = function (map_df ){
756+ hawaii_df = map_df %> % dplyr :: filter(. $ is_hawaii )
757+ hawaii_df = sf :: st_transform(hawaii_df , 102007 )
758+ hawaii_shift = sf :: st_geometry(hawaii_df ) + c(- 1e+6 , - 2e+6 )
759+ hawaii_df = sf :: st_set_geometry(hawaii_df , hawaii_shift )
760+ hawaii_df = sf :: st_set_crs(hawaii_df , 102003 )
761+ return (hawaii_df )
762+ }
763+
764+
765+ shift_main = function (map_df ){
766+ main_df = map_df %> % dplyr :: filter(
767+ ! . $ is_alaska ) %> % dplyr :: filter(
768+ ! . $ is_hawaii ) %> % dplyr :: filter(! . $ is_pr )
769+ main_df = sf :: st_transform(main_df , 102003 )
770+ return (main_df )
771+ }
772+
0 commit comments