数据可视化——R语言ggplot2包绘制相关矩阵为热图

数据可视化——R语言ggplot2包绘制相关矩阵为热图

概述:R语言软件和数据可视化——ggplot2快速绘制相关矩阵为热图。本文翻译了一篇英文博客,博客原文链接:http://www.sthda.com/english/wiki/ggplot2-quick-correlation-matrix-heatmap-r-software-and-data-visualization. 内容包括使用ggplot2包快速绘制相关矩阵为热图;由于相关矩阵是对称的,完全显示可能会造成数据冗余,提供了辅助函数将相关矩阵的下三角或上三角元素赋值为NA去除冗余的数据;另外也提供了采用分层聚类的辅助函数将相关矩阵重新排序以发掘相关矩阵中的隐藏信息;最后,还可以将相关矩阵中的系数显示在图形中。

目录

  1. 数据准备
  2. 计算相关矩阵
  3. 使用ggplot2创建相关矩阵的热图
  4. 获取相关矩阵的下三角和上三角
  5. 绘制相关矩阵的上三角元素为热图
  6. 对相关矩阵重新排序
  7. 在热图上添加相关系数

本R教程描述了如何使用R软件和ggplot2包可视化相关矩阵。

1. 数据准备

以下示例中mtcars的数据被使用。

mydata <- mtcars[, c(1,3,4,5,6,7)]
head(mydata)

输出结果如下:

                   mpg disp  hp drat    wt  qsec
Mazda RX4         21.0  160 110 3.90 2.620 16.46
Mazda RX4 Wag     21.0  160 110 3.90 2.875 17.02
Datsun 710        22.8  108  93 3.85 2.320 18.61
Hornet 4 Drive    21.4  258 110 3.08 3.215 19.44
Hornet Sportabout 18.7  360 175 3.15 3.440 17.02
Valiant           18.1  225 105 2.76 3.460 20.22

2. 计算相关矩阵

可以使用R语言中的cor()函数创建相关矩阵:

cormat <- round(cor(mydata),2)
head(cormat)

输出结果如下:

       mpg  disp    hp  drat    wt  qsec
mpg   1.00 -0.85 -0.78  0.68 -0.87  0.42
disp -0.85  1.00  0.79 -0.71  0.89 -0.43
hp   -0.78  0.79  1.00 -0.45  0.66 -0.71
drat  0.68 -0.71 -0.45  1.00 -0.71  0.09
wt   -0.87  0.89  0.66 -0.71  1.00 -0.17
qsec  0.42 -0.43 -0.71  0.09 -0.17  1.00

3. 使用ggplot2创建相关矩阵的热图

使用reshape2包中的melt()函数将数据“融合”:

library(reshape2)
melted_cormat <- melt(cormat)
head(melted_cormat)

输出结果:

  Var1 Var2 value
1  mpg  mpg  1.00
2 disp  mpg -0.85
3   hp  mpg -0.78
4 drat  mpg  0.68
5   wt  mpg -0.87
6 qsec  mpg  0.42

ggplot2包中的geom_tile()函数可用于可视化相关矩阵:

library(ggplot2)
ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) + 
  geom_tile()

输出结果:
数据可视化——R语言ggplot2包绘制相关矩阵为热图_第1张图片

默认的绘图很不美观,将在下一节中看到如何更改热图的外观。

请注意,如果您有大量数据,则最好使用geom_raster()函数,运行更快。

4. 获取相关矩阵的下三角和上三角

注意,相关矩阵具有冗余信息。可使用下面的函数将其中的一半设置为NA。

# 获得相关矩阵的下三角元素
# Get lower triangle of the correlation matrix
  get_lower_tri<-function(cormat){
    cormat[upper.tri(cormat)] <- NA
    return(cormat)
  }
# 获得相关矩阵的上三角元素
  # Get upper triangle of the correlation matrix
  get_upper_tri <- function(cormat){
    cormat[lower.tri(cormat)]<- NA
    return(cormat)
  }

使用方法:

# 获取相关矩阵cormat的上三角元素
upper_tri <- get_upper_tri(cormat)
upper_tri

输出结果:

     mpg  disp    hp  drat    wt  qsec
mpg    1 -0.85 -0.78  0.68 -0.87  0.42
disp  NA  1.00  0.79 -0.71  0.89 -0.43
hp    NA    NA  1.00 -0.45  0.66 -0.71
drat  NA    NA    NA  1.00 -0.71  0.09
wt    NA    NA    NA    NA  1.00 -0.17
qsec  NA    NA    NA    NA    NA  1.00

5. 绘制相关矩阵的上三角元素为热图

融合相关数据并删除具有NA值的行:

# Melt the correlation matrix
library(reshape2)
melted_cormat <- melt(upper_tri, na.rm = TRUE)
# Heatmap
library(ggplot2)
ggplot(data = melted_cormat, aes(Var2, Var1, fill = value))+
 geom_tile(color = "white")+
 scale_fill_gradient2(low = "blue", high = "red", mid = "white", 
   midpoint = 0, limit = c(-1,1), space = "Lab", 
   name="Pearson\nCorrelation") +
  theme_minimal()+ 
 theme(axis.text.x = element_text(angle = 45, vjust = 1, 
    size = 12, hjust = 1))+
 coord_fixed()

输出结果:
数据可视化——R语言ggplot2包绘制相关矩阵为热图_第2张图片
上图中:

负值显示为为蓝色,正值显示为红色。

scale_fill_gradient2与参数limit = c(-1,1)一起使用,限制显示的相关系数范围从-1到1。

coord_fixed()的功能可确保x轴上的一个单位与y轴上的一个单位的长度相同。

6. 对相关矩阵重新排序

本节介绍如何根据相关系数对相关矩阵进行重新排序。这对于识别矩阵中的隐藏模式很有用。下面的示例中使用了分层聚类的hclust()函数对相关矩阵进行重新排序。

对相关矩阵重新排序的辅助函数:

reorder_cormat <- function(cormat){
# Use correlation between variables as distance
dd <- as.dist((1-cormat)/2)
hc <- hclust(dd)
cormat <-cormat[hc$order, hc$order]
}

重新排序的相关数据可视化:

# Reorder the correlation matrix
cormat <- reorder_cormat(cormat)
upper_tri <- get_upper_tri(cormat)
# Melt the correlation matrix
melted_cormat <- melt(upper_tri, na.rm = TRUE)
# Create a ggheatmap
ggheatmap <- ggplot(melted_cormat, aes(Var2, Var1, fill = value))+
 geom_tile(color = "white")+
 scale_fill_gradient2(low = "blue", high = "red", mid = "white", 
   midpoint = 0, limit = c(-1,1), space = "Lab", 
    name="Pearson\nCorrelation") +
  theme_minimal()+ # minimal theme
 theme(axis.text.x = element_text(angle = 45, vjust = 1, 
    size = 12, hjust = 1))+
 coord_fixed()
# Print the heatmap
print(ggheatmap)

输出结果:
数据可视化——R语言ggplot2包绘制相关矩阵为热图_第3张图片

7. 在热图上添加相关系数

  • 使用geom_text()函数在图表上添加相关系数。
  • 使用theme()函数设置为空白主题(删除轴标签,面板网格和背景以及轴刻度)。
  • 使用guides()函数更改图例标题的位置。
ggheatmap + 
geom_text(aes(Var2, Var1, label = value), color = "black", size = 4) +
theme(
  axis.title.x = element_blank(),
  axis.title.y = element_blank(),
  panel.grid.major = element_blank(),
  panel.border = element_blank(),
  panel.background = element_blank(),
  axis.ticks = element_blank(),
  legend.justification = c(1, 0),
  legend.position = c(0.6, 0.7),
  legend.direction = "horizontal")+
  guides(fill = guide_colorbar(barwidth = 7, barheight = 1,
                title.position = "top", title.hjust = 0.5))

输出结果:
数据可视化——R语言ggplot2包绘制相关矩阵为热图_第4张图片

References

http://www.sthda.com/english/wiki/ggplot2-quick-correlation-matrix-heatmap-r-software-and-data-visualization

你可能感兴趣的:(R语言数据可视化)