So erstellen Sie eine Heatmap in R mit ggplot2

Von Fabian
Kategorie: R
Tags: ggplot2
Lesezeit: 4 Minuten

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

Beispiel: Erstellen einer Heatmap in R

Zum Erstellen einer Heatmap 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 melt() zu verwenden
library(reshape2)

#"melt" Mtcars in Langformat
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, besteht darin, die Werte für jede Variable von 0 auf 1 neu zu skalieren, indem Sie die Funktion rescale() im Paket scales() und die Funktion ddply() im Paket plyr() verwenden:

#Bibliotheken laden
library(plyr)
library(scales)

#Rescale-Werte für alle Variablen im "melted" 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 nach den Werten einer der Variablen wie mpg mit dem folgenden Code bestellen:

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

#"melt" Mtcars in Langformat
melt_mtcars <- melt(mtcars)

#Rescale-Werte für alle Variablen im melted 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 Autonamen als neue Spalte und sortieren Sie ihn nach absteigendem mpg
mtcars$car <- row.names(mtcars)
mtcars$car <- with(mtcars, reorder(car, -mpg))

#Mtcars in Langformat "schmelzen"
melt_mtcars <- melt(mtcars)

#Rescale-Werte für alle Variablen im melted 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

Statistik: Der Weg zur Datenanalyse

* Amazon Affiliate Link


Das könnte Sie auch interessieren: