2

I am trying to make a heat map with R. I am trying with ggplot2.My actual dataframe is much larger but in here I only include a small part

x <- c(502.9, 512.1, 716.6, 759.7, 776.1, 776.5, 736.1, 271.3, 304.7, 279.9, 263.8, 726.6, 767.6, 778.8, 779.2, 263.6, 291.8, 472.6, 499.9, 684.9) 
y <- c(374.6, 367.4, 378.1, 373.7, 381.4, 395.7, 412.1, 399.2, 364.6, 382.1, 409.1, 410.4, 411.1, 429.4, 477.4, 468.6, 406.5, 343.2, 356.9, 365.2)
a <- data.frame(x,y)
ggplot(a, aes(x = x, y =y))  + stat_density2d(geom = "tile", aes(fill = ..density..), contour = FALSE) + scale_fill_gradient (low= "green", high="red") + geom_point()

I would like to obtain something similar to this image, the more red the area is, the more points there are in that area.

enter image description here

As you can see, when I try to make this, my background is green. How can I change my code to obtain a heatmap as the one showed in the image? How can I put an image as background?

Thanks!

unomas83
  • 151
  • 1
  • 9

1 Answers1

6

Something like this?

library(ggplot2)
data(hadley, package="ggmap")
img <- hadley
set.seed(1)      # for reproducible example
df  <- data.frame(x=rnorm(100,mean=c(150,250),sd=25),
                  y=rnorm(100,mean=480, sd=20))

ggplot(df, aes(x,y))  + 
  annotation_raster(img, xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf)+
  stat_density2d(geom = "polygon", aes(fill=..level..)) + 
  geom_point(size=0.5)+
  scale_fill_gradient(low="green",high="red") + 
  scale_x_continuous(limits=c(0,dim(img)[2]),expand=c(0,0))+
  scale_y_continuous(limits=c(0,dim(img)[1]),expand=c(0,0))+
  coord_fixed()

The main idea is to use geom="polygon" with aes(fill=..level..). The image itself can be added using annotation_raster(...) as described in this post.

With sincere apologies to Hadley Wickham.

Community
  • 1
  • 1
jlhoward
  • 58,004
  • 7
  • 97
  • 140
  • That is perfect, jihoward! Thanks a lot! – unomas83 Sep 30 '15 at 08:26
  • I had to transform my scores to z-scores. Any idea about how I can adjust the image in the background to these new scores? – unomas83 Oct 05 '15 at 19:18
  • I'm not understanding the question. Why does the background image need to be adjusted? Perhaps you should restate the question with your new data (the z-scores). – jlhoward Oct 08 '15 at 15:18
  • How would this work if you already had the level data pre-computed (i.e., in addition to `x` and `y`, another column with `level`)? Which `stat` (if at all) or `geom` would be needed then? – slhck Oct 04 '17 at 15:22