[R] specify breaks in divergent palette in RColorBrewer: was divergent colors around zero in levelplot()

Achim Zeileis Achim.Zeileis at uibk.ac.at
Tue Nov 26 08:41:48 CET 2013


On Mon, 25 Nov 2013, C. Alina Cansler wrote:

> Don,
>
> This looks helpful:
> https://stat.ethz.ch/pipermail/r-help/2011-March/272361.html
>
> Also, here is some code that I had, and tried to make applicable to your
> question:
>
> div.colors <-colorRampPalette(c("blue", "white", "red" ))
> x<-seq(-1,12,1);x
> palette(div.colors(length(x)))
> y<- rep(1,length(x))
> barplot(y,  col=x+2, space=0, axes=FALSE, border = NA  ,   cex.names=1.3 ,
> xlab="", ylab="",xaxt="n")

These colors are not very well balanced because "blue" is much darker than 
"red". You can see that more clearly when you desaturate the colors where 
the blue branch corresponds to darker colors than the red branch.

The palettes in RColorBrewer or colorspace offer better balanced palettes. 
Consider the code below.

And as for the original question: diverge_hcl(99) would be one option to 
obtain 99 divergent colors in "colorspace".

library("colorspace")
pal <- function(col, border = "light gray") {
   n <- length(col)
   plot(0, 0, type="n", xlim = c(0, 1), ylim = c(0, 1),
     axes = FALSE, xlab = "", ylab = "")
   rect(0:(n-1)/n, 0, 1:n/n, 1, col = col, border = border)
}

par(mfrow = c(2, 2), mar = rep(1, 4))
pal(div.colors(9))
pal(diverge_hcl(9))
pal(desaturate(div.colors(9)))
pal(desaturate(diverge_hcl(9)))


> -Alina
>
>
>
>
> On Mon, Nov 25, 2013 at 4:27 PM, Don McKenzie <dmck at u.washington.edu> wrote:
>
>> Bert or anyone else familiar with RColorBrewer:
>>
>> Has anyone tried to accomplish with RColorBrewer what I asked about in my
>> original post (below)?
>>
>> Here is an example cribbed from the levelplot() help examples
>>
>> x <- seq(pi/4, 5 * pi, length.out = 100)
>> y <- seq(pi/4, 5 * pi, length.out = 100)
>> r <- as.vector(sqrt(outer(x^2, y^2, "+")))
>> grid <- expand.grid(x=x, y=y)
>> grid$z <- cos(r^2) * exp(-r/(pi^3))
>>
>> # now use RColorBrewer to get a palette
>>
>> library("RColorBrewer?)
>> levelplot(z~x*y, grid,col.regions=brewer.pal(6,"BrBG?))   # the numeric
>> argument to brewer.pal is the number of colors used ? I tried several
>>
>> This gives me a nice brown-to-green gradient but does not (AFAICS) give me
>> control over where the center of the divergence lies. Even in this
>> symmetrical
>> example, I can?t get it to be at zero ? it repeats on either side of zero.
>>
>> thanks to anyone who pages through all this and makes a suggestion, even
>> if it doesn?t work.  :-)
>>
>> On Nov 22, 2013, at 10:25 PM, Bert Gunter <gunter.berton at gene.com> wrote:
>>
>>> Use the Rcolorbrewer package.
>>>
>>> -- Bert
>>>
>>> On Fri, Nov 22, 2013 at 8:43 PM, Don McKenzie <dmck at u.washington.edu>
>> wrote:
>>>> I would like to produce a levelplot with divergent colors such that
>> increasingly negative values of Z get darker in the first color and
>> increasingly
>>>> positive values get darker in the second color.  this is common in
>> cartography. I have tried tinkering with the col.regions argument but the
>> best I can do
>>>> is to get the split in the middle of my range of Z, but in my
>> particular case range(Z) is (-1,12).
>>>>
>>>> I am using R 3.0.2 on OSX 10.9
>>>>
>>>> Here is an example
>>>>
>>>> x <- y <- c(1:25)
>>>> grid <- expand.grid(x=x,y=y)
>>>> grid$z <- sort(runif(625,min=-1,max=12))
>>>> levelplot(z ~ x*y,grid)   # produces the default pink and blue but the
>> split is at ~5.5
>>>>
>>>> # do something clever here
>>>> # e.g., my.colors <- <create a palette that splits at zero>
>>>>
>>>> levelplot(z ~ x*y,grid,col.regions=my.colors)  # so there should be
>> some light pink at the bottom and the rest increasingly intense blue
>>>>
>>>> Ideas appreciated.  Thanks in advance.
>>>>
>>>>
>>>
>>> Bert Gunter
>>> Genentech Nonclinical Biostatistics
>>>
>>> (650) 467-7374
>>
>> Don McKenzie
>> Research Ecologist
>> Pacific Wildland Fire Science Lab
>> US Forest Service
>>
>> Affiliate Professor
>> School of Environmental and Forest Sciences
>> University of Washington
>> dmck at uw.edu
>>
>>
>>
>>
>
>
> -- 
> C. Alina Cansler
> Fire and Mountain Ecology Lab
> School of Environmental and Forest Sciences
> College of the Environment
> University of Washington
> E-mail: acansler at uw.edu
> Cell: 206-794-1630
>
> 	[[alternative HTML version deleted]]
>
>



More information about the R-help mailing list