Comment créer une carte thermique dans R à l’aide de ggplot2



Ce tutoriel explique comment créer une carte thermique dans R à l’aide de ggplot2.

Exemple : création d’une carte thermique dans R

Pour créer une carte thermique, nous utiliserons l’ensemble de données R intégré mtcars .

#view first six rows of mtcars
head(mtcars)

#                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
#Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
#Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
#Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
#Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
#Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

Actuellement, mtcars est dans un format large, mais nous devons le fondre dans un format long afin de créer la carte thermique.

#load reshape2 package to use melt() function
library(reshape2)

#melt mtcars into long format
melt_mtcars <- melt(mtcars)

#add column for car name
melt_mtcars$car <- rep(row.names(mtcars), 11)

#view first six rows of melt_mtcars
head(melt_mtcars)

#  variable value               car
#1      mpg  21.0         Mazda RX4
#2      mpg  21.0     Mazda RX4 Wag
#3      mpg  22.8        Datsun 710
#4      mpg  21.4    Hornet 4 Drive
#5      mpg  18.7 Hornet Sportabout
#6      mpg  18.1           Valiant

Nous pouvons utiliser le code suivant pour créer la heatmap dans ggplot2 :

library(ggplot2)

ggplot(melt_mtcars, aes(variable, car)) +
  geom_tile(aes(fill = value), colour = "white") +
  scale_fill_gradient(low = "white", high = "red")

Malheureusement, étant donné que les valeurs de disp sont beaucoup plus grandes que les valeurs de toutes les autres variables du bloc de données, il est difficile de voir la variation de couleur des autres variables.

Une façon de résoudre ce problème consiste à redimensionner les valeurs de chaque variable de 0 à 1 en utilisant la fonction rescale() dans le package scales() et la fonction ddply() dans le package plyr() :

#load libraries
library(plyr)
library(scales)

#rescale values for all variables in melted data frame
melt_mtcars <- ddply(melt_mtcars, .(variable), transform, rescale = rescale(value))

#create heatmap using rescaled values
ggplot(melt_mtcars, aes(variable, car)) +
  geom_tile(aes(fill = rescale), colour = "white") +
  scale_fill_gradient(low = "white", high = "red")

Nous pouvons également modifier les couleurs de la carte thermique en modifiant les couleurs utilisées dans l’argument scale_fill_gradient() :

#create heatmap using blue color scale
ggplot(melt_mtcars, aes(variable, car)) +
  geom_tile(aes(fill = rescale), colour = "white") +
  scale_fill_gradient(low = "white", high = "steelblue")

Notez que la carte thermique est actuellement classée par nom de voiture. On pourrait plutôt ordonner la heatmap en fonction des valeurs d’une des variables comme mpg en utilisant le code suivant :

#define car name as a new column, then order by mpg descending
mtcars$car <- row.names(mtcars)
mtcars$car <- with(mtcars, reorder(car, mpg))

#melt mtcars into long format
melt_mtcars <- melt(mtcars)

#rescale values for all variables in melted data frame
melt_mtcars <- ddply(melt_mtcars, .(variable), transform, rescale = rescale(value))

#create heatmap using rescaled values
ggplot(melt_mtcars, aes(variable, car)) +
  geom_tile(aes(fill = rescale), colour = "white") +
  scale_fill_gradient(low = "white", high = "steelblue")

Pour trier la heatmap par mpg croissant, il suffit d’utiliser -mpg dans l’argument reorder() :

#define car name as a new column, then order by mpg descending
mtcars$car <- row.names(mtcars)
mtcars$car <- with(mtcars, reorder(car, -mpg))

#melt mtcars into long format
melt_mtcars <- melt(mtcars)

#rescale values for all variables in melted data frame
melt_mtcars <- ddply(melt_mtcars, .(variable), transform, rescale = rescale(value))

#create heatmap using rescaled values
ggplot(melt_mtcars, aes(variable, car)) +
  geom_tile(aes(fill = rescale), colour = "white") +
  scale_fill_gradient(low = "white", high = "steelblue")

Enfin, nous pouvons supprimer les étiquettes des axes x et y ainsi que la légende si nous n’aimons pas son apparence en utilisant les arguments labs() et theme() :

#create heatmap with no axis labels or legend
ggplot(melt_mtcars, aes(variable, car)) +
  geom_tile(aes(fill = rescale), colour = "white") +
  scale_fill_gradient(low = "white", high = "steelblue") +
  labs(x = "", y = "") +
  theme(legend.position = "none")

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *