Skip to content
Snippets Groups Projects
plot_utils.R 2.34 KiB
Newer Older
  • Learn to ignore specific revisions
  • Azadpour, Elmera's avatar
    Azadpour, Elmera committed
    # Map census data 
    #'
    #' @param census_data, dataframe of census data for specified variable of interest 
    #' @param conus_sf, sf of conus states outline
    #' @param pal, assign map palette 
    #' @param leg_title, character string for legend title
    #' @param outfile_path, outfile path for pngs 
    #' @param width, set png width
    #' @param height, set png height 
    #' @param dpi, set png dots per inches 
    #' @param counties_outline_col, assign color to counties outline
    #' @param conus_outline_col, assign color to conus outline
    #' @param bg_col, assign background color for maps
    #' @param load_font, assign font name
    
    #' @param percent_leg if else statement where if TRUE, apply 0-100 legend, otherwise retain 0 - max of variable name
    
    Azadpour, Elmera's avatar
    Azadpour, Elmera committed
    plot_census_map <- function(census_data, conus_sf, pal, leg_title, outfile_path, width, height, dpi, 
    
                                counties_outline_col, conus_outline_col, bg_col, load_font, font_size, var, percent_leg){
    
    Azadpour, Elmera's avatar
    Azadpour, Elmera committed
      
      font_legend <- load_font
      font_add_google(font_legend)
      showtext_opts(dpi = 300, regular.wt = 200, bold.wt = 700)
      showtext_auto(enable = TRUE)
    
    Azadpour, Elmera's avatar
    Azadpour, Elmera committed
      census_map <- census_data |> 
        ggplot(aes(fill = .data[[var]])) + 
        geom_sf(color = counties_outline_col,
                linewidth = 0.05) +
        geom_sf(data = conus_sf,
                fill = NA,
                color = conus_outline_col,
                linewidth = 0.2,
                linetype = "solid") + 
        theme_void() +
        theme(text = element_text(family = font_legend, size = font_size),
    
    Cee Nell's avatar
    Cee Nell committed
              legend.margin = margin(r = 10), legend.position = 'bottom') +
        guides(fill = guide_colorbar(
               title.position = "top",
               title.theme = element_text(face = 'bold'),
               direction = "horizontal",
               position = "bottom",
               barwidth = 20,
               barheight = 1
               )
    
      if (percent_leg == FALSE) {
      census_map <- census_map +     
        scale_fill_distiller(
        palette = pal, 
        direction = 1,
        name = leg_title,
        limits = c(0, max(census_data[[var]], na.rm = TRUE)),
        labels = scales::comma) 
      
     } else {
       census_map <- census_map +     
         scale_fill_distiller(
           palette = pal, 
           direction = 1,
           name = leg_title,
           limits = c(0, 100),
           breaks = c(0, 25, 50, 75, 100)
         )
     }
    
    Azadpour, Elmera's avatar
    Azadpour, Elmera committed
      ggsave(outfile_path, census_map, width = width, height = height, dpi = dpi, bg = bg_col)
      
      return(outfile_path)
    }