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

Dimitri Liakhovitski dimitri.liakhovitski at gmail.com
Thu Apr 2 23:02:44 CEST 2015


Thank you, Jean, but I think this newcol line is not working. I am running:

newcol <- ifelse(missing, "white",

rgb(newpal(mydata.final$Mean.Wait/max(mydata.final$Mean.Wait,
na.rm=T)),
                     maxColorValue=255))

# And I am getting:
Error in rgb(newpal(mydata.final$Mean.Wait/max(mydata.final$Mean.Wait,  :
  color intensity NA, not in 0:255

I think it's not liking the NAs - despite the ifelse...

On Thu, Apr 2, 2015 at 4:26 PM, Adams, Jean <jvadams at usgs.gov> wrote:
> 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.
>
>



-- 
Dimitri Liakhovitski



More information about the R-help mailing list