So erstellen sie eine heatmap in r mit ggplot2
In diesem Tutorial wird erläutert, wie Sie mit ggplot2 eine Heatmap in R erstellen.
Beispiel: Erstellen einer Heatmap in R
Um eine Heatmap zu erstellen, verwenden wir den integrierten R-Datensatz 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
Derzeit liegt mtcars in einem breiten Format vor, aber wir müssen es in ein langes Format überführen, um die Heatmap zu erstellen.
#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 char #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, char)) + geom_tile(aes(fill = value), color = "white") + scale_fill_gradient(low = "white", high = "red")
Da die Werte von disp viel größer sind als die Werte aller anderen Variablen im Datenrahmen, ist es leider schwierig, die Farbvariation der anderen Variablen zu erkennen.
Eine Möglichkeit, dieses Problem zu lösen, besteht darin, die Werte jeder Variablen mithilfe der Funktion rescale() im Paket scales() und der Funktion ddply() im Paket plyr() von 0 auf 1 neu zu skalieren:
#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, char)) + geom_tile(aes(fill = rescale), color = "white") + scale_fill_gradient(low = "white", high = "red")
Wir können die Heatmap-Farben auch ändern, indem wir die im Argument „scale_fill_gradient()“ verwendeten Farben ändern:
#create heatmap using blue color scale
ggplot(melt_mtcars, aes(variable, char)) +
geom_tile(aes(fill = rescale), color = "white") +
scale_fill_gradient(low = "white", high = "steelblue")
Beachten Sie, dass die Heatmap derzeit nach Fahrzeugnamen kategorisiert ist. Stattdessen könnten wir die Heatmap nach den Werten einer der Variablen wie mpg ordnen, indem wir den folgenden Code verwenden:
#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, char)) + geom_tile(aes(fill = rescale), color = "white") + scale_fill_gradient(low = "white", high = "steelblue")
Um die Heatmap durch Erhöhen von mpg zu sortieren, verwenden Sie einfach -mpg im reorder()-Argument:
#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, char)) + geom_tile(aes(fill = rescale), color = "white") + scale_fill_gradient(low = "white", high = "steelblue")
Schließlich können wir die Beschriftungen der x- und y-Achse sowie die Legende entfernen, wenn uns das Aussehen nicht gefällt, indem wir die Argumente labs() und theme() verwenden:
#create heatmap with no axis labels or legend ggplot(melt_mtcars, aes(variable, char)) + geom_tile(aes(fill = rescale), color = "white") + scale_fill_gradient(low = "white", high = "steelblue") + labs(x = "", y = "") + theme(legend.position = "none")