Mis a jour le 2016-05-22, 16:22

Heatmaps

Objectif : donner une représentation sous forme d'une image en niveaux de couleurs (ou de gris) d'une matrice, avec optionnellement un clustering des lignes et des colonnes de la matrice.
Traçage d'une heatmap simple :
mat <- matrix(c(4, 6, 3, 5, 8, 10, 1, 2, 8), nrow = 3, dimnames = list(c("a", "b", "c"), c("A", "B", "C")))
print(mat)
heatmap(mat)
  A  B C
a 4  5 1
b 6  8 2
c 3 10 8
Trace une heatmap avec les lignes de la matrice en ligne, et les colonnes de la matrice en colonnes, mais en en réordonnant les lignes et les colonnes par clustering hierarchique (en utilisant hclust) et en affichant l'arbre dans chaque dimension.
heatmap(mat, Rowv = NA, Colv = NA)
trace la heatmap sans réordonner les lignes et les colonnes et sans tracer d'arbre :
heatmap(mat, scale = "none", main = "title", col = gray(seq(1, 0, -0.1)), cexRow = 1, cexCol = 1, margins = c(12, 12), labRow = c("x", "y", "z"), labCol = c("X", "Y", "Z"))
:
On peut décider des couleurs à affecter à chaque intervalle de valeurs :
heatmap(mat, breaks = c(0, 3, 8, 10), col = c("lightblue", "red", "yellow"), scale = "none", Rowv = NA, Colv = NA) :
On peut préciser la fonction de calcul de la distance, et la méthode de clustering :
heatmap(mat, distfun = myDistanceFunction, hclustfun = myClusteringFunction)
image : fonction de plus bas niveau que heatmap qui permet d'afficher une image avec des carrés colorés.
image(seq(4), seq(5), matrix(seq(20), nrow = 4), zlim = c(0, 30), col = gray(seq(1, 0, -0.1))) : affiche une heatmap brute en niveaux de gris (plus c'est fort, plus c'est noir, le noir correspondant à 30.
ATTENTION : les lignes de la matrice sont en x, les colonnes de la matrice sont en y, contrairement à la fonction heatmap ! (matrice représentée tournée de 1/4 de tour dans le sens inverse des aiguilles d'une montre).
Affichage d'une heatmap avec comme noms les noms des lignes et des colonnes de la matrice :
mat <- matrix(c(5, 0, 0, 3, 4, 0, 1, 8, 9) / 10, nrow = 3)
rownames(mat) <- c("A", "B", "C")
colnames(mat) <- c("a", "b", "c")
image(seq(nrow(mat)), seq(ncol(mat)), mat, col = gray(seq(1, 0, -0.1)),
      breaks = seq(0, 1.1, 0.1), axes = FALSE, xlab = "", ylab = "",
      main = "my title")
axis(1, at = seq(nrow(mat)), labels = rownames(mat), las = 2)
axis(2, at = seq(ncol(mat)), labels = colnames(mat), las = 2)
Si en plus, on veut visualiser une représentation ayant exactement la même orientation que l'impression de la matrice (i.e. sans le quart de tour), il suffit de faire sur la matrice avant l'appel à image() :
mat <- t(mat[rev(seq(nrow(mat))),])
Affichage d'une heatmap avec les valeurs correspondantes dans chaque cellule :
mat <- matrix(seq(20), nrow = 4)
image(seq(4), seq(5), mat, zlim = c(0, 30), col = gray(seq(1, 0, -0.1)))
text(rep(seq(4), times = 5), rep(seq(5), each = 4), as.vector(mat))

Copyright Aymeric Duclert
programmer en R, tutoriel R, graphes en R