كيفية إنشاء خريطة حرارية في r باستخدام ggplot2
يشرح هذا البرنامج التعليمي كيفية إنشاء خريطة حرارية في لغة R باستخدام ggplot2.
مثال: إنشاء خريطة حرارية في R
لإنشاء خريطة حرارية، سنستخدم مجموعة بيانات R المضمنة 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
حاليًا، تكون mtcars بتنسيق واسع، ولكننا بحاجة إلى دمجها في تنسيق طويل لإنشاء الخريطة الحرارية.
#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:
library(ggplot2) ggplot(melt_mtcars, aes(variable, char)) + geom_tile(aes(fill = value), color = "white") + scale_fill_gradient(low = "white", high = "red")
لسوء الحظ، نظرًا لأن قيم disp أكبر بكثير من قيم جميع المتغيرات الأخرى في إطار البيانات، فمن الصعب رؤية تباين الألوان للمتغيرات الأخرى.
إحدى طرق حل هذه المشكلة هي إعادة قياس قيم كل متغير من 0 إلى 1 باستخدام الدالة rescale() في الحزمةscale() والدالة ddply() في الحزمة 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, char)) + geom_tile(aes(fill = rescale), color = "white") + scale_fill_gradient(low = "white", high = "red")
يمكننا أيضًا تغيير ألوان الخريطة الحرارية عن طريق تغيير الألوان المستخدمة في الوسيطةscale_fill_gradient() :
#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")
لاحظ أن الخريطة الحرارية مصنفة حاليًا حسب اسم السيارة. يمكننا بدلًا من ذلك ترتيب الخريطة الحرارية وفقًا لقيم أحد المتغيرات مثل mpg باستخدام الكود التالي:
#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")
لفرز الخريطة الحرارية عن طريق زيادة mpg ، ما عليك سوى استخدام -mpg في الوسيطة 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, char)) + geom_tile(aes(fill = rescale), color = "white") + scale_fill_gradient(low = "white", high = "steelblue")
أخيرًا، يمكننا إزالة تسميات المحورين x وy بالإضافة إلى وسيلة الإيضاح إذا لم تعجبنا الطريقة التي تظهر بها باستخدام الوسيطتين labs() و theme():
#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")