[R] Heatmap without levelplot
niederlein-rstat at yahoo.de
Wed May 6 08:45:28 CEST 2009
thanks a lot for your answer! And thanks a lot to all others helping me with
Uwe Ligges schrieb:
> Antje wrote:
>> Hi Uwe,
>> I tried to explain my problem with the given example.
>> I don't see any documentation which tells me that the length of
>> "col.regions" should be one less than "at". (At least I assume now
>> that it should be this way...)
>> If it's equal or longer some colors (in the middle of the
>> color-vector) are simply not used.
>> Just try the example below with rainbow(5) and rainbow(6) and compare
>> the results... both plot will use 5 colors!
>> Sorry, but this behaviour is not really self-explaining to me... maybe
>> I'm to blind to find the documentation which says that only one color
>> less will ensure the usage of all colors.
> Well, of you have 5 at locations (i.e. breaks), then you have 4
> intervals in between and that's the amount of colors that is sensible.
From the documentation this was not really clear to me (though it makes sense,
>> (It is so important for me because I need to display a heatmap with
>> colors let's say
>> * all lower data outliers "green",
>> * all higher data outliers "blue" and
>> * everything else within the color range "yellow" to "red".
>> I've seen that some values do not get blue or green though they are
>> I've attached one graph, I've generated - maybe it helps to understand)
>> Any wrong assumption?
> Say you want everything below -1 be considered as a lower outlier and
> all above 1 is a higher outlier, then you can say:
> levelplot(matrix(c(1,2,0,-2), nrow=2),
> at = c(-Inf, seq(-1, 1, length=10), Inf),
> col.regions = c(rgb(0,1,0),
> hcl(seq(20, 80, length=10), c=400),
> Then below -1 is green (rgb(0,1,0)), above 1 is blue (rgb(0,0,1)) and in
> between we have 10 regions from -1 to 1 each with a color between some
> kind of yellow and red in hcl() space.
Thank you for this little example. Just two comments:
1) I was not aware of the possibility to use "Inf" - it just has the
disadvantage that these colors are not displayed at the color vector (maybe
this can be adjusted somehow)
2) if you replace one number of the matrix with -1, it will be displayed green.
So it would be considered as an outlier. From the documentation it was also not
clear to me that the lower endpoint of the interval is always excluded (except
for the very first value of the at-vector), while the upper endpoint will be
included. (This also makes sense but in this case I have to slightly modify my
data because I'd like to include both endpoints of my non-outlier-range...)
Anyway, I guess, I solved all problems and found a workable solution :-)
> Uwe Ligges
>> Uwe Ligges schrieb:
>>> Antje wrote:
>>>> Hi there,
>>>> as I'm not sure to understand the coloring levelplot uses, I'm
>>>> looking for another easy way to create a heatmap like this:
>>>> mat <- matrix(seq(1,5, length.out = 12), nrow = 3)
>>>> mat[1,2] <- 3.5
>>>> my.at <- seq(0.5,5.5, length.out = 6)
>>>> my.col.regions <- rainbow(5)
>>>> graph <- levelplot(t(mat[nrow(mat):1, ] ), at = my.at, col.regions =
>>>> Can anybody help me with some hints or little examples?
>>> Dear Antje,
>>> since you are asking the same question again now, maybe you can
>>> explain what you are going to get? In fact, I do not undertsand where
>>> your problem is. R places the colors according to the values in your
>>> matrix very well including the legend and I thought up to today that
>>> the plot is self explaining.
>>> Best wishes,
>>> Uwe Ligges
>>>> R-help at r-project.org mailing list
>>>> PLEASE do read the posting guide
>>>> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help