Introduction
Les packages d3heatmap et heatmaply permettent tous deux de faire des cartes de chaleur interactives (infobulles, zooms, …), d3heatmap est plus rapide a s’executer, heatmaply est plus simple a utiliser pour les matrices de correlation. Ci-dessous un bref comparatif des deux packages.
Les donnees
# le jeu de données
= mtcars
mtcars
# le jeu de donnees centre-reduit
= scale(mtcars)
mtcars_norm
# remotes::install_version("d3heatmap", "0.6.1.2")
library("d3heatmap")
library("heatmaply")
# pour les palettes de couleurs
library("RColorBrewer")
Cartes sur les donnees brutes
Ces premieres cartes sont plutot ratees car on n’a pas normalise les variables, seuls les champs disp et hp qui prennent de grandes valeurs ressortent.
d3heatmap(mtcars, Rowv = FALSE, Colv = FALSE)
heatmaply(mtcars, Rowv = FALSE, Colv = FALSE)
Tri intelligent sur les lignes et les colonnes
Transformations appliquees :
- on normalise les donnees, les infobulles affichent les valeurs non normalisees
- on applique une palette de couleurs qui ne fait ressortir que les valeurs extremes, les palettes par defaut faisaient aussi ressortir les valeurs medianes
- on applique un tri intelligent (classification ascendante hierarchique) pour rapprocher les lignes et les colonnes qui se ressemblent. C’est le parametrage par defaut pour les deux fonctions (Rowv = TRUE, Colv = TRUE)
d3heatmap(mtcars_norm,
cellnote = mtcars,
colors = "Blues")
heatmaply(mtcars_norm,
custom_hovertext = mtcars,
colors = colorRampPalette(brewer.pal(9, "Blues")),
plot_method ="plotly")
Matrices de correlation
Comme ces matrices sont symétriques on impose le meme tri aux lignes et aux colonnes avec le parametre symm = TRUE.
Et on veut une palette de 3 couleurs, par exemple rouge pour les correlations egales a -1, blanc pour 0, et bleu pour 1. Il y a un petit travail a faire pour corriger le decalage vers le rouge des couleurs avec d3heatmap, c’est plus simple avec heatmaply.
= cor(mtcars)
mat_corr min(mat_corr)
# petit decalage des couleurs avec d3heatmap :
# la cellule qsec/drat est anormalement blanche pour la valeur 0.09
# car la couleur bleue est associee a la valeur maximale 1 et
# la couleur rouge a la valeur minimale qui n'est pas egale a -1
d3heatmap(mat_corr,
colors = c("red", "white", "blue"),
symm = TRUE)
## on corrige les couleurs pour d3heatmap
# vecteur initial de 101 degrades du rouge au blanc puis au bleu,
# on le tronque en appliquant une regle de trois
= colorRampPalette(c("red","white","blue"))(101)
couleurs = floor(1 + 101 * (1 + min(mat_corr))/2)
indice_min = couleurs[indice_min:101]
couleurs
# cette fois la cellule qsec/drat est correctement bleu clair
d3heatmap(mat_corr,
colors = couleurs,
symm = TRUE)
## avec heatmaply le decalage de couleur est plus simple
# car on peut preciser les valeurs numeriques qui
# correspondent aux couleurs extremes de la palette
# avec decalage
heatmaply(mat_corr,
colors = c("red", "white", "blue"),
symm = TRUE)
# plus de decalage
heatmaply(mat_corr,
colors = c("red", "white", "blue"),
symm = TRUE,
limits = c(-1, 1))
[1] -0.8676594