Heatmap with lattice and levelplot()

This document explains how to use the levelplot() function of the lattice R package to build heatmaps.

Basis use of levelplot()

The lattice package allows to build heatmaps thanks to the levelplot() function.

Input data: here input is a data frame with 3 columns prividing the X and Y coordinate of the cell and its value. (Long format). # Load the lattice package
library("lattice")

# Dummy data
x <- seq(1,10, length.out=20)
y <- seq(1,10, length.out=20)
data <- expand.grid(X=x, Y=y)
data\$Z <- runif(400, 0, 5)

## Try it out
levelplot(Z ~ X*Y, data=data  ,xlab="X",
main="")

From wide input matrix

Previous example of this document was based on a data frame at the long format. Here, a square matrix is used instead. It is the second format understood by the levelplot() function.

Note: here row and column order isn’t respected in the heatmap. # Load the library
library("lattice")

# Dummy data
data <- matrix(runif(100, 0, 5) , 10 , 10)
colnames(data) <- letters[c(1:10)]
rownames(data) <- paste( rep("row",10) , c(1:10) , sep=" ")

# plot it flipping the axis
levelplot(data)

Flip and reorder axis

The t() function of R allows to transpose the input matrix, and thus to flip X and Y coordinates.

Moreover, you can reverse matrix order as shown below to reverse order in the heatmap as well. Now the heatmap is organized exactly as the input matrix. # Load the library
library("lattice")

# Dummy data
data <- matrix(runif(100, 0, 5) , 10 , 10)
colnames(data) <- letters[c(1:10)]
rownames(data) <- paste( rep("row",10) , c(1:10) , sep=" ")

# plot it flipping the axis
levelplot( t(data[c(nrow(data):1) , ]),
col.regions=heat.colors(100))

Custom colors   There are several ways to custom the color palette:

• native palettes of R: terrain.color(), rainbow(), heat.colors(), topo.colors() or cm.colors()
• palettes of RColorBrewer. See list of available palettes here.
• palettes of Viridis: viridis, magma, inferno, plasma. # Lattice package
require(lattice)

# The volcano dataset is provided, it looks like that:

# 1: native palette from R
levelplot(volcano, col.regions = terrain.colors(100)) # try cm.colors() or terrain.colors()

# 2: Rcolorbrewer palette
library(RColorBrewer)
coul <- colorRampPalette(brewer.pal(8, "PiYG"))(25)
levelplot(volcano, col.regions = coul) # try cm.colors() or terrain.colors()

# 3: Viridis
library(viridisLite)
coul <- viridis(100)
levelplot(volcano, col.regions = coul)
#levelplot(volcano, col.regions = magma(100))

Related chart types

Contact

This document is a work by Yan Holtz. Any feedback is highly encouraged. You can fill an issue on Github, drop me a message on Twitter, or send an email pasting yan.holtz.data with gmail.com.