数据可视化——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()

输出结果:

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

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

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

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

# 获得相关矩阵的下三角元素
# Get lower triangle of the correlation matrixget_lower_tri<-function(cormat){cormat[upper.tri(cormat)] <- NAreturn(cormat)}
# 获得相关矩阵的上三角元素# Get upper triangle of the correlation matrixget_upper_tri <- function(cormat){cormat[lower.tri(cormat)]<- NAreturn(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()

输出结果:

上图中:

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

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 themetheme(axis.text.x = element_text(angle = 45, vjust = 1, size = 12, hjust = 1))+coord_fixed()
# Print the heatmap
print(ggheatmap)

输出结果:

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))

输出结果:

References

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

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

  1. 数据可视化——R语言ggplot2包绘制精美的小提琴图(并箱线图或误差条图组合)

    数据可视化--R语言ggplot2包绘制精美的小提琴图(并箱线图或误差条图组合) 概述:R语言使用ggplot2工具包绘制小提琴图.为了使数据表达更加丰富,同时将小提琴图与箱线图和误差条图相结合.另外 ...

  2. 数据可视化——R语言wordcloud2包绘制字云图

    数据可视化--R语言wordcloud2包绘制字云图 概述:使用R语言的wordcloud2工具包绘制字云图,并保存为图片格式或网页格式 字云图,也称为标签云图或语言云图.通过使每个字的大小与其出现频 ...

  3. 使用R语言ggplot2包绘制pathway富集分析气泡图(Bubble图):数据结构及代码

    气泡图是在笛卡尔坐标系同加入大小的参数所形成的可以表示三个变量关系的图例.在对基因完成GO/KEGG分析后,使用气泡图可以直观的展示pathway.pvalue.count之间的关系.下面为使用R语言 ...

  4. R语言ggridges包绘制漂亮的峰峦图(山脊图)-下篇

    链接:教程文档下载.pdf 交 流 分 享 扣 扣 群 : 925920448 \color{red}{交流分享扣扣群:925920448} 交流

  5. 数据可视化——R语言绘制散点相关图并自动添加相关系数和拟合方程

    数据可视化--R语言绘制散点相关图并自动添加相关系数和拟合方程 加载所需的包并设置主题样式 示例数据 基本的散点相关图 添加相关系数和显著性水平(P值) 存在多个组别的散点相关图 自动添加回归曲线的拟 ...

  6. R语言ggplot2包和ggtext包在可视化图像中的指定位置添加文本框(横向文本框、竖向文本框)

    R语言ggplot2包和ggtext包在可视化图像中的指定位置添加文本框(横向文本框.竖向文本框) 目录

  7. R语言ggplot2包和lattice包可视化改变x轴和y轴的显示位置实战

    R语言ggplot2包和lattice包可视化改变.自定义x轴和y轴的显示位置实战 目录 R语言ggplot2包和lattice包可视化改变.自定义x轴和y轴的显示位置实战

  8. R语言ggplot2包以及lattice包可视化方程、函数的曲线实战:function curve

    R语言ggplot2包以及lattice包可视化方程.函数的曲线实战:function curve 目录 R语言ggplot2包以及lattice包可视化方程.函数的曲线实战:function cur ...

  9. R语言ggplot2包旋转(Rotate)可视化图像轴标签实战

    R语言ggplot2包旋转(Rotate)可视化图像轴标签实战 目录 R语言ggplot2包旋转(Rotate)可视化图像轴标签实战

最新文章

  1. Android 4.0屏蔽式多点触摸
  2. JavaScript操作DOM元素
  3. SQL存储过程中调用存储过程返回的表
  4. 不玩虚的!深入B端SaaS产品设计核心理念【干货】
  5. MYSQL 表 部分数据导出、导入
  6. 如何让CentOS8虚拟机与主机相互Ping通
  7. STM8单片机复位源判断
  8. JavaScript and CSS
  9. linux多线程入库hive,hiveserver2 定时挂采坑记
  10. gedit 可以实现的更多功能插件
  11. 511遇见易语言教程API模块制作cmd复制文件
  12. 【论文阅读|深读】Net2Net-NE:Learning Network-to-Network Model for Content-rich Network Embedding
  13. Cent OS 7.4 1708 下载安装
  14. windows程序设计作业
  15. Linux—vi命令详解
  16. 安卓的WebView的使用
  17. 微信小程序 Springboot校运会高校运动会管理系统
  18. 基于vue+exharts的双折线图
  19. 品商业模式[摘自xiewen网络业游戏规则]
  20. “数据折叠”:今天,那些人工智能背后“标数据的人”正在回家

热门文章

  1. 小程序中如何正确使用换行符‘\n‘
  2. iOS动画——文字晃动
  3. 关于nanopc debian系统的安装
  4. 北京理工大学ACM冬季培训课程之C++的应用
  5. 如何禁止WordPress主题纯英文评论教程
  6. 使用Vivado生成ADI的ADC例程(以AD9680为例)
  7. 二元函数matlab画图_噶米matlab实验五二元函数的图形.docx
  8. 第一章:pycharm、anaconda、opencv、pytorch、tensorflow、paddlex等环境配置大全总结【图像处理py版本】
  9. Ubuntu 16.04设置定时任务
  10. 使用 Tkprof 分析 ORACLE 跟踪文件