So erstellen Sie eine Heatmap in R mit ggplot2

Von Fabian
Kategorie: R
Lesezeit: 4 Minuten

In diesem Tutorial wird erklärt, wie Sie mit ggplot2 eine Heatmap in R erstellen.

Beispiel: Erstellen einer Heatmap in R

Um eine Heatmap zu erstellen, verwenden wir das integrierte R-Dataset mtcars.

#Erste sechs Reihen von mtcars anzeigen
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

Derzeit ist mtcars in einem breiten Format, aber wir müssen es in ein langes Format schmelzen, um die Heatmap zu erstellen.

#Laden Sie das Paket reshape2, um die Funktion blend() zu verwenden
library(reshape2)
#Mtcars ins Langformat bringen
melt_mtcars <- melt(mtcars)
#Spalte für Autonamen hinzufügen
melt_mtcars$car <- rep(row.names(mtcars), 11)

# Die ersten sechs Zeilen von melt_mtcars anzeigen
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

Wir können den folgenden Code verwenden, um die Heatmap in ggplot2 zu erstellen:

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

Heatmap in ggplot2

Da die Werte für disp viel größer sind als die Werte für alle anderen Variablen im Dataframe, ist es leider schwierig, die Farbabweichung für die anderen Variablen zu erkennen.

Eine Möglichkeit, dieses Problem zu lösen, ist es, die Werte für jede Variable von 0 bis 1 mit der rescale() Funktion in der scales() Library und die ddply() Funktion in der plyr() Libraray neu zu skalieren:

#Bibliotheken laden
library(plyr)
library(scales)

#Rescaling der Werte für alle Variablen im veränderten Dataframe
melt_mtcars <- ddply(melt_mtcars, .(variable), transform, rescale = rescale(value))
#Heatmap mit neu skalierten Werten erstellen
ggplot(melt_mtcars, aes(variable, car)) +
      geom_tile(aes(fill = rescale), colour = "white") +
      scale_fill_gradient(low = "white", high = "red")

Heatmap mit neu skalierten Werten in R

Sie können die Farben der Heatmap auch ändern, indem Sie die im Argument scale_fill_gradient() verwendeten Farben ändern:

#Heatmap mit blauer Farbskala erstellen
ggplot(melt_mtcars, aes(variable, car)) +
      geom_tile(aes(fill = rescale), colour = "white") +
      scale_fill_gradient(low = "white", high = "steelblue")

Heatmap in R mit ggplot2 und blauer Farbskala

Beachten Sie, dass die Heatmap derzeit nach Fahrzeugnamen sortiert ist. Wir könnten stattdessen die Heatmap gemäß den Werten einer der Variablen wie mpg mit dem folgenden Code bestellen:

#Definieren Sie den car name als neue Spalte und sortieren Sie ihn absteigend nach mpg
mtcars$car <- row.names(mtcars)
mtcars$car <- with(mtcars, reorder(car, mpg))

#Mtcars ins Langformat bringen
melt_mtcars <- melt(mtcars)
#Rescaleing der Werte für alle Variablen im veränderten Dataframe
melt_mtcars <- ddply(melt_mtcars, .(variable), transform, rescale = rescale(value))

#Heatmap mit neu skalierten Werten erstellen
ggplot(melt_mtcars, aes(variable, car)) +
      geom_tile(aes(fill = rescale), colour = "white") +
      scale_fill_gradient(low = "white", high = "steelblue") 

Heatmap in ggplot2 mit geordneten Werten

Um die Heatmap nach aufsteigendem mpg zu ordnen, müssen wir einfach -mpg im Argument reorder() verwenden:

#Definieren Sie den car name als neue Spalte und sortieren Sie ihn absteigend nach mpg
mtcars$car <- row.names(mtcars)
mtcars$car <- with(mtcars, reorder(car, -mpg))

#Mtcars ins Langformat bringen 
melt_mtcars <- melt(mtcars)

#Rescaleing der Werte für alle Variablen im veränderten Dataframe
melt_mtcars <- ddply(melt_mtcars, .(variable), transform, rescale = rescale(value))

# Heatmap mit neu skalierten Werten erstellen
ggplot(melt_mtcars, aes(variable, car)) +
      geom_tile(aes(fill = rescale), colour = "white") +
      scale_fill_gradient(low = "white", high = "steelblue")

Heatmap in R mit ggplot2

Zuletzt können wir die Beschriftungen der x- und y-Achse zusammen mit der Legende entfernen, wenn uns das Aussehen mit den Argumenten labs() und theme() nicht gefällt:

#Heatmap ohne Achsenbeschriftungen oder Legende erstellen
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")

ggplot2 Heatmap ohne Achsenbeschriftungen oder Legende


Das könnte Sie auch interessieren:
Excel

So zeichnen Sie eine Gleichung in Excel

Oft sind Sie daran interessiert, eine Gleichung oder eine Funktion in Excel zu zeichnen. Glücklicherweise ist dies mit integrierten Excel-Formeln einfach zu bewerkstelligen.

Dieses Tutorial enthält mehrere Beispiele zum Zeichnen …