Ggplot2 kullanarak r'de ısı haritası nasıl oluşturulur
Bu eğitimde, ggplot2 kullanılarak R’de bir ısı haritasının nasıl oluşturulacağı açıklanmaktadır.
Örnek: R’de Isı Haritası Oluşturma
Bir ısı haritası oluşturmak için yerleşik R veri kümesi mtcars’ı kullanacağız.
#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
Şu anda mtcars geniş formatta ancak ısı haritasını oluşturabilmek için onu uzun formatta harmanlamamız gerekiyor.
#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
Ggplot2’de ısı haritasını oluşturmak için aşağıdaki kodu kullanabiliriz:
library(ggplot2) ggplot(melt_mtcars, aes(variable, char)) + geom_tile(aes(fill = value), color = "white") + scale_fill_gradient(low = "white", high = "red")
Ne yazık ki disp değerleri veri çerçevesindeki diğer tüm değişkenlerin değerlerinden çok daha büyük olduğundan diğer değişkenlerin renk değişimini görmek zordur.
Bu sorunu çözmenin bir yolu, Scales() paketindeki rescale() fonksiyonunu ve plyr() paketindeki ddply() fonksiyonunu kullanarak her değişkenin değerini 0’dan 1’e yeniden ölçeklendirmektir:
#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")
Scale_fill_gradient() bağımsız değişkeninde kullanılan renkleri değiştirerek ısı haritası renklerini de değiştirebiliriz:
#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")
Isı haritasının şu anda araç adına göre kategorize edildiğini unutmayın. Bunun yerine aşağıdaki kodu kullanarak ısı haritasını mpg gibi değişkenlerden birinin değerlerine göre sıralayabiliriz:
#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")
Isı haritasını mpg değerini artırarak sıralamak için, reorder() argümanında -mpg komutunu kullanmanız yeterlidir:
#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")
Son olarak, eğer görünüşünü beğenmezsek, labs() ve theme() argümanlarını kullanarak açıklamanın yanı sıra x ve y ekseni etiketlerini de kaldırabiliriz:
#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")