> langage et graphiques > Graphiques > Heatmaps
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 :
- la ligne 1 est tout en bas.
- la colonne 1 est tout à gauche.
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")) :
- scale : indique si ce sont les lignes ("row") ou les colonnes ("col") qui doivent être recentrées et mises à l'échelle. Mettre "none" pour ne pas faire de remise à l'échelle (représentation des valeurs brutes).
- main : titre.
- col : échelle de couleurs à utiliser.
- cexRow : facteur de grandissement des caractères pour les noms des lignes (défaut calculé).
- cexCol : facteur de grandissement des caractères pour les noms des colonnes (défaut calculé).
- margins : vecteur à 2 valeurs (bottom, right) pour les marges du côté des noms des colonnes et des lignes.
- labRow : liste des étiquettes des lignes (par défaut, les étiquettes des lignes de la matrice).
- labCol : liste des étiquettes des colonnes (par défaut, les étiquettes des colonnes de la matrice).
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) :
- breaks : les limites des intervalles.
- col : les couleurs de chaque intervalle (il doit y avoir une valeur de moins que dans breaks).
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