[R] Color US counties on US map using a numeric variable for color intensity

Adams, Jean jvadams at usgs.gov
Thu Apr 2 22:26:08 CEST 2015


Dimitri,

You could use colorRamp() and rgb() to get more continuous colors.
For example

newpal <- colorRamp(c("yellow", "red"))
missing <- is.na(mydata.final$Mean.Wait)
newcol <- ifelse(missing, "white",
  rgb(newpal(mydat$Mean.Wait/max(mydat$Mean.Wait)), maxColorValue=255))
map('county', fill=TRUE, col=newcol,
            resolution=0, lty=0, bg="transparent")
map('state', lwd=1, add=TRUE)

Jean


On Thu, Apr 2, 2015 at 12:03 PM, Dimitri Liakhovitski <
dimitri.liakhovitski at gmail.com> wrote:

> I have a data frame 'mydata.final' (see below) that contains US
> counties and a continuous numeric variable 'Mean.Wait' that ranges
> from zero to 10 or so. I also created variable 'wait' that is based on
> the 'Mean.Wait' and takes on discrete values from 1 (lowest values on
> 'Mean.Wait') to 5 (highest values on 'Mean.Wait').
>
> I can create a map of the US with the counties colored based on the
> values of 'wait' using R package 'maps':
>
> #################################################################
> ### Generating an artificial data file:
> #################################################################
> library(maps)
> mydata.final <- data.frame(county = (map('county', plot = FALSE)$names),
>                  stringsAsFactors = F)
>
> ### My numeric variable:
> set.seed(123)
> mydata.final$Mean.Wait <- runif(nrow(mydata.final)) * 10
>
> ### Introducing NAs to mimic my real data set:
> set.seed(1234)
> mydata.final$Mean.Wait[sample(1:nrow(mydata.final), 1500)] <- NA
>
> ### Cutting the original numeric variable into categories
> ### because I don't know how to color based on 'Mean.Wait':
> mydata.final$wait <- cut(mydata.final$Mean.Wait, breaks = 5)
> levels(mydata.final$wait) <- 1:5
> mydata.final$wait <- as.numeric(as.character(mydata.final$wait))
>
> ####################################################################
> Building a US map based on 'wait' (5 categories)
> #################################################################
>
> ### Creating my 5 colors:
> pal <- colorRampPalette(c("yellow", "red"))
> allcolors <- pal(5)
>
> ### Looking at my 5 colors:
> barplot(1:5, rep(1,5), col = allcolors, horiz = T)
>
> ### Builiding the US map using 5 categories in 'wait':
> map('county', fill = TRUE, col = allcolors[mydata.final$wait],
>             resolution = 0, lty = 0, bg = "transparent")
> map('state', lwd=1, add=TRUE)
>
> My goal is: instead of splitting 'Mean.Wait' into 5 ordered categories
> ('wait'), I'd like to color the counties on the map based on the
> intensity of my (continuous) 'Mean.Wait'. What would be the way to do
> it and maybe even to add a legend?
> Thanks a lot!
>
> --
> Dimitri Liakhovitski
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list