Comment Créer une Superbe Heatmap Interactive dans R



Comment Créer une Superbe Heatmap Interactive dans R

Cet article décrit comment créer et personnaliser une Heatmap interactive dans R en utilisant le package R heatmaply, qui est basé sur le système ggplot2 et plotly.js.



Sommaire:

Prérequis

Installez le package R requis:

install.packages("heatmaply")

Charger le package:

library("heatmaply")

Préparation des données

Normaliser les données afin de rendre les valeurs des variables comparables.

df <- normalize(mtcars)

Notez que d’autres fonctions de transformation des données sont scale() (pour la normalisation standard), percentize() [pour la transformation en percentile ; disponible dans le package R heatmaply]. Plus d’informations ici : Comment Normaliser et Standardiser les Données dans R pour une Visualisation en Heatmap Magnifique.

Heatmap basique

heatmaply(df)

Heatmaply a également la possibilité de produire une Heatmap statique en utilisant la fonction R ggheatmap:

ggheatmap(df)

Notez que, heatmaply utilise le package seriation pour trouver un ordre optimal des lignes et des colonnes.

La fonction heatmaply() a une option appelée seriate, dont les valeurs possibles sont:

  • “OLO” (Optimal leaf ordering ou Ordre optimal des feuilles en français) : C’est la valeur par défaut.
  • “mean”: Cette option donne le résultat que nous obtiendrions par défaut des fonctions de Heatmap dans d’autres packages tels que gplots::heatmap.2().
  • “none”: Cette option nous donne les dendrogrammes sans aucune rotation. Le résultat est similaire à celui que nous obtiendrions par défaut avec hclust.

Reproduction de l’ordre des dendrogrammes de gplots::heatmap.2().

  • Créer une Heatmap à l’aide du package R gplots:
gplots::heatmap.2(
  as.matrix(df),
  trace = "none",
  col = viridis(100),
  key = FALSE
)

  • Créer une version similaire en utilisant le package R heatmaply:
heatmaply(
  as.matrix(df),
  seriate = "mean", 
  row_dend_left = TRUE,
  plot_method = "plotly"
)

Diviser les dendrogrammes de lignes et de colonnes en k groupes

L’algorithme k-means est utilisé.

heatmaply(
  df,
  k_col = 2, 
  k_row = 2
)

Modifier les palettes de couleurs

La palette de couleurs par défaut est la suivante viridis. D’autres excellentes palettes de couleurs sont disponibles dans les packages cetcolor et RColorBrewer.

Utilisez les couleurs viridis avec l’option “magma”:

heatmaply(
  df,
  colors = viridis(n = 256,  option = "magma"),
  k_col = 2, 
  k_row = 2
)

Utilisez la palette RColorBrewer :

library(RColorBrewer)
heatmaply(
  df,
  colors = colorRampPalette(brewer.pal(3, "RdBu"))(256),
  k_col = 2, 
  k_row = 2
)

Spécifiez des gradients de couleurs personnalisées en utilisant la fonction scale_fill_gradient2() [package ggplot2].

gradient_col <- ggplot2::scale_fill_gradient2(
   low = "blue", high = "red", 
    midpoint = 0.5, limits = c(0, 1)
  )
heatmaply(
  df,
  scale_fill_gradient_fun = gradient_col
)

Personnaliser les dendrogrammes en utilisant dendextend

Un utilisateur peut fournir ses propres dendrogrammes pour les lignes/colonnes de la Heatmap en utilisant les paramètres Rowv et Colv:

library(dendextend)
# Créer un dendrogramme pour les lignes
mycols <- c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07")
row_dend <-  df %>%
  dist() %>%
  hclust() %>%
  as.dendrogram() %>%
  set("branches_lwd", 1) %>% 
  set("branches_k_color", mycols[1:3], k = 3) 

# Créer un dendrogramme pour les colonnes
col_dend <-  df %>%
  t() %>%
  dist() %>%
  hclust() %>%
  as.dendrogram() %>%
  set("branches_lwd", 1) %>% 
  set("branches_k_color", mycols[1:2], k = 2)
# Visualiser la heatmap
heatmaply(
  df,
  Rowv = row_dend,
  Colv = col_dend
)

Ajouter une annotation basée sur des facteurs supplémentaires

Le code R suivant ajoute une annotation sur les côtés des colonnes et des lignes:

heatmaply(
  df[, -c(8, 9)],
  col_side_colors = c(rep(0, 5), rep(1, 4)),
  row_side_colors = df[, 8:9]
)

Ajouter des annotations de texte

Par défaut, la couleur du texte de chaque cellule est choisie pour assurer la lisibilité, le texte noir étant affiché sur les cellules claires et le texte blanc sur les cellules foncées.

heatmaply(df, cellnote = mtcars)

Ajouter un texte de survol personnalisé

mat <- df
mat[] <- paste("This cell is", rownames(mat))
mat[] <- lapply(colnames(mat), function(colname) {
    paste0(mat[, colname], ", ", colname)
})
heatmaply(
  df,
  custom_hovertext = mat
)

Enregistrer votre heatmap dans un fichier

Créer un fichier html interactif:

dir.create("folder")
heatmaply(mtcars, file = "folder/heatmaply_plot.html")
browseURL("folder/heatmaply_plot.html")

Enregistrement d’un fichier statique (png/jpeg/pdf). Avant d’utiliser ce code pour la première fois, il se peut que vous deviez d’abord executer webshot::install_phantomjs() ou installer le programme orca de plotly.

dir.create("folder")
heatmaply(mtcars, file = "folder/heatmaply_plot.png")
browseURL("folder/heatmaply_plot.png")

Sauvegarder le fichier, sans le tracer dans la console:

tmp <- heatmaply(mtcars, file = "folder/heatmaply_plot.png")
rm(tmp)



Version: English





No Comments

Give a comment

Want to post an issue with R? If yes, please make sure you have read this: How to Include Reproducible R Script Examples in Datanovia Comments