Dimitri Liakhovitski
2015-Apr-02 21:02 UTC
[R] Color US counties on US map using a numeric variable for color intensity
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
Dimitri Liakhovitski
2015-Apr-02 21:08 UTC
[R] Color US counties on US map using a numeric variable for color intensity
Jean, I think I fixed it:
newpal <- colorRamp(c("yellow", "red"))
missing <- is.na(mydata.final$Mean.Wait)
newcol <- ifelse(missing, "white",
rgb(newpal(mydata.final$Mean.Wait[!is.na(mydata.final$Mean.Wait)]/
max(mydata.final$Mean.Wait,
na.rm=T)), maxColorValue=255))
map('county', fill=TRUE, col=newcol,
resolution=0, lty=0, bg="transparent")
map('state', lwd=1, add=TRUE)
One understanding question: what exactly does this rgb line do and why
do we have to say "maxColorValue=255"?
Thank you!
On Thu, Apr 2, 2015 at 5:02 PM, Dimitri Liakhovitski
<dimitri.liakhovitski at gmail.com> wrote:> 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
--
Dimitri Liakhovitski
Jim Lemon
2015-Apr-02 22:18 UTC
[R] Color US counties on US map using a numeric variable for color intensity
Hi Dimitri,
You can also try the color.scale function in plotrix, which allows you to
specify the NA color in the call.
newcol<-color.scale(mydata.final$Mean.Wait,extremes=c("yellow","red"),na.color="white")
Jim
On Fri, Apr 3, 2015 at 8:08 AM, Dimitri Liakhovitski <
dimitri.liakhovitski at gmail.com> wrote:
> Jean, I think I fixed it:
>
> newpal <- colorRamp(c("yellow", "red"))
> missing <- is.na(mydata.final$Mean.Wait)
> newcol <- ifelse(missing, "white",
>
> rgb(newpal(mydata.final$Mean.Wait[!is.na(mydata.final$Mean.Wait)]/
> max(mydata.final$Mean.Wait,
> na.rm=T)), maxColorValue=255))
> map('county', fill=TRUE, col=newcol,
> resolution=0, lty=0, bg="transparent")
> map('state', lwd=1, add=TRUE)
>
> One understanding question: what exactly does this rgb line do and why
> do we have to say "maxColorValue=255"?
> Thank you!
>
> On Thu, Apr 2, 2015 at 5:02 PM, Dimitri Liakhovitski
> <dimitri.liakhovitski at gmail.com> wrote:
> > 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
>
>
>
> --
> 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]]