[R] Heatmap without levelplot

Uwe Ligges ligges at statistik.tu-dortmund.de
Wed May 6 10:24:24 CEST 2009



Antje wrote:
> Hi Uwe,
> 
> thanks a lot for your answer! And thanks a lot to all others helping me 
> with this issue!
> 
> 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, I agree)
> 
>>
>>
>>> (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 
>>> outliers...
>>> I've attached one graph, I've generated - maybe it helps to understand)
>>>
>>> Any wrong assumption?
>>
>> Maybe:
>>
>> 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),
>>          rgb(0,0,1)))
>>
>> 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...)


You can add or substract .Machine$double.eps to the endpoint in order to 
in/exclude the "==" case.

Uwe Ligges



> Anyway, I guess, I solved all problems and found a workable solution :-)
> 
> Ciao,
> Antje
> 
> 
>>
>>
>> Uwe Ligges
>>
>>
>>
>>
>>> Ciao,
>>> Antje
>>>
>>>
>>> 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:
>>>>>
>>>>> library(lattice)
>>>>> 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 
>>>>> = my.col.regions)
>>>>> print(graph)
>>>>>
>>>>> 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
>>>>
>>>>
>>>>
>>>>
>>>>> Antje
>>>>>
>>>>> ______________________________________________
>>>>> R-help at r-project.org mailing list
>>>>> 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.
>>>>
>>>
>>
>




More information about the R-help mailing list