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
mtcars_norm = scale(mtcars)

# 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 :

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.

mat_corr = cor(mtcars)
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
couleurs = colorRampPalette(c("red","white","blue"))(101)
indice_min = floor(1 + 101 * (1 + min(mat_corr))/2)
couleurs = couleurs[indice_min:101]

# 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

retour au debut du document