@@ -107,6 +107,81 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
107107 geo = df $ geo
108108 names(val ) = geo
109109
110+ # Make background layer for MSA and HRR maps which are incomplete
111+ if ((attributes(x )$ geo_type == " msa" ) |
112+ (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 )
115+ map_df $ STATEFP <- as.character(map_df $ STATEFP )
116+ map_df $ is_alaska = map_df $ STATEFP == ' 02'
117+ map_df $ is_hawaii = map_df $ STATEFP == ' 15'
118+ map_df $ is_pr = map_df $ STATEFP == ' 72'
119+ map_df $ STATEFP <- as.numeric(map_df $ STATEFP )
120+ map_df $ is_state = map_df $ STATEFP < 57
121+ pr_df = map_df %> % filter(. $ is_pr )
122+ hawaii_df = map_df %> % filter(. $ is_hawaii )
123+ alaska_df = map_df %> % filter(. $ is_alaska )
124+
125+ main_df = map_df %> % filter(! map_df $ is_alaska )
126+ main_df = main_df %> % filter(! main_df $ is_hawaii )
127+ main_df = main_df %> % filter(main_df $ is_state )
128+
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 )
152+
153+ main_geo = main_df $ STATEFP
154+ main_col = rep(missing_col , length(main_geo ))
155+
156+ hawaii_geo = hawaii_df $ STATEFP
157+ hawaii_col = rep(missing_col , length(hawaii_geo ))
158+
159+ alaska_geo = alaska_df $ STATEFP
160+ alaska_col = rep(missing_col , length(alaska_geo ))
161+
162+ pr_geo = pr_df $ STATEFP
163+ pr_col = rep(missing_col , length(pr_geo ))
164+
165+ aes = ggplot2 :: aes
166+ geom_args = list ()
167+ geom_args $ color = border_col
168+ geom_args $ size = border_size
169+ geom_args $ mapping = aes(geometry = geometry )
170+
171+ geom_args $ fill = main_col
172+ geom_args $ data = main_df
173+ back_main_layer = do.call(ggplot2 :: geom_sf , geom_args )
174+ geom_args $ fill = pr_col
175+ geom_args $ data = pr_df
176+ back_pr_layer = do.call(ggplot2 :: geom_sf , geom_args )
177+ geom_args $ fill = hawaii_col
178+ geom_args $ data = hawaii_df
179+ back_hawaii_layer = do.call(ggplot2 :: geom_sf , geom_args )
180+ geom_args $ fill = alaska_col
181+ geom_args $ data = alaska_df
182+ back_alaska_layer = do.call(ggplot2 :: geom_sf , geom_args )
183+ }
184+
110185 # Create the choropleth colors for counties
111186 if (attributes(x )$ geo_type == " county" ) {
112187 map_df = usmap :: us_map(" county" , include = include )
@@ -143,41 +218,145 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
143218
144219 else if (attributes(x )$ geo_type == " msa" ) {
145220 map_df = st_read(' ../data/shapefiles/msa/cb_2019_us_cbsa_5m.shp' )
146- print(typeof(map_df ))
147221 map_df = map_df %> % filter(map_df $ LSAD == ' M1' ) # only get metro and not micropolitan areas
148222 if (length(include ) > 0 ) {
149- map_df = map_df %> % filter(map_df $ NAME %in% include )
223+ map_df = map_df %> % filter(map_df $ GEOID %in% include )
150224 }
151225 map_df $ NAME <- as.character(map_df $ NAME )
152226 map_df $ is_alaska = substr(map_df $ NAME , nchar(map_df $ NAME ) - 1 , nchar(map_df $ NAME )) == ' AK'
153227 map_df $ is_hawaii = substr(map_df $ NAME , nchar(map_df $ NAME ) - 1 , nchar(map_df $ NAME )) == ' HI'
154228 map_df $ is_pr = substr(map_df $ NAME , nchar(map_df $ NAME ) - 1 , nchar(map_df $ NAME )) == ' PR'
155- print(typeof(map_df ))
156- pr_df = (map_df %> % filter(map_df $ is_pr )) + c(- 0.9e6 , 1e6 )
157- hawaii_df = map_df %> % filter(map_df $ is_hawaii ) + c(- 1e6 , - 2e6 )
229+ pr_df = map_df %> % filter(map_df $ is_pr )
230+ hawaii_df = map_df %> % filter(map_df $ is_hawaii )
158231 alaska_df = map_df %> % filter(map_df $ is_alaska )
159- map_df = map_df %> % filter(! map_df $ is_alaska )
160- map_df = map_df %> % filter(! map_df $ is_hawaii )
161- map_df = map_df %> % filter(! map_df $ is_pr )
232+ main_df = map_df %> % filter(! map_df $ is_alaska )
233+ main_df = main_df %> % filter(! main_df $ is_hawaii )
234+ main_df = main_df %> % filter(! main_df $ is_pr )
235+
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 )
240+
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+
245+ # 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 )
254+ r = - 16 * pi / 180
255+ rotation = matrix (c(cos(r ), sin(r ), - sin(r ), cos(r )), nrow = 2 , ncol = 2 )
256+ # 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 ])
279+ }
162280
163- map_geo = map_df $ GEOID
164- map_col = rep(missing_col , length(map_geo ))
281+ else if (attributes(x )$ geo_type == " hrr" ) {
282+ map_df = st_read(' ../data/shapefiles/hrr/geo_export_ad86cff5-e5ed-432e-9ec2-2ce8732099ee.shp' )
283+ if (length(include ) > 0 ) {
284+ map_df = map_df %> % filter(map_df $ hrr_num %in% include )
285+ }
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 )
290+ map_df $ hrr_name <- as.character(map_df $ hrr_name )
291+ 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'
293+ map_df $ is_pr = substr(map_df $ hrr_name , 1 , 2 ) == ' PR'
294+
295+ pr_df = map_df %> % filter(map_df $ is_pr )
296+ hawaii_df = map_df %> % filter(map_df $ is_hawaii )
297+ alaska_df = map_df %> % filter(map_df $ is_alaska )
165298
166- map_obs = map_geo [map_geo %in% geo ]
167- map_col [map_geo %in% geo ] = col_fun(val [map_obs ])
299+ main_df = map_df %> % filter(! map_df $ is_alaska )
300+ main_df = main_df %> % filter(! main_df $ is_hawaii )
301+ main_df = main_df %> % filter(! main_df $ is_pr )
302+
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 )
307+
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 )
311+
312+ # 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 )
321+ r = - 16 * pi / 180
322+ rotation = matrix (c(cos(r ), sin(r ), - sin(r ), cos(r )), nrow = 2 , ncol = 2 )
323+ # 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+
168349 }
169350
170- else if (attributes(x )$ geo_type == " hrr" ) {}
171-
172351 # Create the polygon layer
173352 if (attributes(x )$ geo_type == " county" ||
174353 attributes(x )$ geo_type == " state" ) {
175354 aes = ggplot2 :: aes
176355 geom_args = list ()
177356 geom_args $ color = border_col
178357 geom_args $ size = border_size
179- geom_args $ fill = map_col
180358 geom_args $ mapping = aes(x = x , y = y , group = group )
359+ geom_args $ fill = map_col
181360 geom_args $ data = map_df
182361 polygon_layer = do.call(ggplot2 :: geom_polygon , geom_args )
183362 coord_layer = ggplot2 :: coord_equal()
@@ -188,13 +367,24 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
188367 geom_args = list ()
189368 geom_args $ color = border_col
190369 geom_args $ size = border_size
191- geom_args $ fill = map_col
192370 geom_args $ mapping = aes(geometry = geometry )
193- geom_args $ data = map_df
194371 coord_args = list ()
195- polygon_layer = do.call(ggplot2 :: geom_sf , geom_args )
372+
373+ geom_args $ fill = main_col
374+ geom_args $ data = main_df
375+ polygon_layer = do.call(ggplot2 :: geom_sf , geom_args )
376+ geom_args $ fill = pr_col
377+ geom_args $ data = pr_df
378+ pr_layer = do.call(ggplot2 :: geom_sf , geom_args )
379+ geom_args $ fill = hawaii_col
380+ geom_args $ data = hawaii_df
381+ 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)
196385 coord_layer = do.call(ggplot2 :: coord_sf , coord_args )
197386 }
387+
198388
199389 # For intensity and continuous color scale, create a legend layer
200390 if (! direction && is.null(breaks )) {
@@ -265,9 +455,12 @@ plot_choro = function(x, time_value = NULL, include = c(), range,
265455 labels = legend_labels ,
266456 guide = guide )
267457 }
268-
269458 # Put it all together and return
270- return (ggplot2 :: ggplot() + polygon_layer + coord_layer +
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 +
271464 title_layer + hidden_layer + scale_layer + theme_layer )
272465}
273466
0 commit comments