Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

A true heat map in R

Tags:

r

heatmap

I'd like to make a true heat map in R, much like a weather map, except my data is much more simple.

Consider this 3d data:

x <- c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4)
y <- c(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5)
z <- rnorm(20)

The z would be color.

Here is what a discrete looking heatmap would like for this data: enter image description here

How can I make a heatmap such that the colors are smooth and the full 2d space is filled with smoothed out colors based on the z values.

Please include sample code, not just a link that will probably confuse me even more, and I've probably already visited that site anyhow. Thanks :)

like image 670
CodeGuy Avatar asked Dec 07 '11 19:12

CodeGuy


2 Answers

Use the following:

interp in the akima package

image.plot in the fields package

x <- c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4)
y <- c(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5)
z <- rnorm(20)

library(fields)
library(akima)

s <- interp(x,y,z)
image.plot(s)
like image 65
screechOwl Avatar answered Sep 22 '22 16:09

screechOwl


smooth.2d in the fields package does a good job (and it is much faster than interp from akima package for larger number of input points.

library(fields)

x <- c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4)
y <- c(1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5)
z <- rnorm(20)

s = smooth.2d(z, x=cbind(x,y), theta=0.5)
image.plot(s)
like image 38
Viliam Simko Avatar answered Sep 26 '22 16:09

Viliam Simko