This heatmap image was generated in Excel but as I'm trying to learn R I would like to know how to make a heatmap like that with R.
Right now, this code is working but not as it was supposed to...
(p <- ggplot(melt(heat), aes(Var2, Var1))
+ geom_tile(aes(fill = value), colour = "white")
+ scale_fill_gradient(low = "red", high = "green"))
I would like to have 2 gradients, green(highest value) to white (the number 1000) to red(lowest value). Is it possible in R?
heat dataset:
> heat[0:10,0:10]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1000.000 0.000 0.0000 0.0000 757.0317 709.3896 843.7676 932.2801 0.0000 1016.7203
[2,] 1087.658 1000.000 0.0000 0.0000 935.5829 854.5110 889.5042 1091.4610 929.1611 0.0000
[3,] 1181.599 1361.953 1000.0000 0.0000 0.0000 1102.1590 1147.1300 984.1374 969.0718 1058.3456
[4,] 1319.012 1405.954 1187.5215 1000.0000 0.0000 1093.8854 1195.7298 1077.0797 1119.4640 1159.5207
[5,] 0.000 0.000 909.1927 817.5097 1000.0000 0.0000 1101.2891 1064.6516 1037.1623 990.3974
[6,] 0.000 0.000 0.0000 0.0000 887.7498 1000.0000 1015.9835 1062.1668 1105.2163 983.2319
[7,] 0.000 0.000 0.0000 0.0000 0.0000 0.0000 1000.0000 911.0699 1026.1989 951.3572
[8,] 0.000 0.000 0.0000 0.0000 0.0000 0.0000 0.0000 1000.0000 834.8725 927.6802
[9,] 1261.824 0.000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1000.0000 795.6285
[10,] 0.000 1121.210 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1000.0000
You can use ?scale_fill_gradientn
gving you values:
library(scales)
heat.dat <- heat[0:10,0:10]
dat <- expand.grid(var1=1:10, var2=1:10)
dat$value <- melt(heat.dat)$value
ggplot(dat, aes(x=var1,y=var2))+
geom_tile(aes(fill = value),colour='white')+
scale_fill_gradientn(colours=c("red","white","green"),
values = rescale(c(min(dat$value), 1000, max(dat$value)))
Using Lattice:
with(dat,
levelplot(round(value,0)~y*x,
dat,
panel=function(...) {
arg <- list(...)
panel.levelplot(...)
panel.text(arg$x, arg$y,arg$z)},
scales = list(y = list(at=y,labels=y),
x = list(at=y,labels=y)),
col.regions = colorRampPalette(c("red", "white", "green"),interpolate ='spline'))
)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With