专栏首页优雅R「R」数据可视化3 : 热图

「R」数据可视化3 : 热图

本文作者蒋刘一琦,自嘲是一个有艺术追求的生信狗,毕业于浙江大学生物信息学专业,目前在复旦大学就读研究生,研究方向为宏基因组。

在生物信息领域我们常常使用R语言对数据可视化。在对数据可视化的时候,我们需要明确想要展示的信息,从而选择最为合适的图突出该信息。本系列文章将介绍多种基于不同R包的作图方法,希望能够帮助到各位读者。

什么是热图(Heatmap)

热图是一个以颜色变化来显示数据的矩阵。Toussaint Loua在1873年就曾使用过热图来绘制对巴黎各区的社会学统计。

Toussaint Loua: 社会学统计

生物学中热图经常用于展示多个基因在不同样本中的表达水平。然后可以通过聚类等方式查看不同组(如疾病组和对照组)特有的pattern。

如上图每一列代表一个样本(左侧的样本是Basal,右侧的样本是Luminal),每一行代表一个基因,颜色代表了表达量(这张图没有显示图例,不知道是偏绿还是偏红代表高表达量)。可以看到这些挑选出的基因在两组的表达有较大的差异,EN1、FOXC1这几个基因在Basal组总体呈现红色,在Luminal呈现绿色。而后面的几个基因在Luminal总体呈现红色,在Basal总体呈现绿色。

外面的树状图形是对基因和样本的聚类,通常聚类的结果把基因的表达量相似的聚在一起,把基因表达的pattern相似的样本聚在一起。所以在该图中可以看到Basal的样本都聚在了一起,Luminal 的样本也都聚在了一起。通常如果两组的差异较明显,组内的pattern较为相似,就能有这样的聚类结果——一个组的样本聚类在一起。相反如果是差异较小的两组样本,就很可能混在一起。

热图还可以用于展示其他物质的丰度比如微生物的相对丰度、代谢组不同物质的含量等等。当然,另一个热图的重要用处就是展现不同指标、不同样本等之间的相关性

此时颜色代表的就是相关系数的大小。所以可以看到自己和自己的相关系数是1,也就是最深的蓝色。约接近白色说明相关性越弱,偏蓝(正相关)或者偏红(负相关)则代表相关性强。

当然在相关性的计算中除了相关系数以外,我们还会看pvalue是否显著。如果我们想要把pvalue表示在图中,可以在格子上添加*号或者具体的数值。同时因为这里可以看到其实不同的两个指标之间的关系是被重复展现了2次,比如symboling与normalized-losses(最上面一行的第二个格子,和从上往下的第二行的第一个格子),因此有时候我们只展现一半即对角线以上或以下的一半图形。

相关性的热图: 格子中的数值代表相关性系数

怎么做热图Heatmap

1)需要什么格式的数据

有很多的软件都可以做heatmap。我们要介绍的当然是R,R默认中提供了heatmap函数。当然,R中也有很多具有heatmap功能的包,比如ggplot2,gplots。今天我们介绍含有heatmap.2功能的gplots包。heatmap.2函数和我们之前要求的数据类型不太一样,这个函数输入数据要求是个矩阵(matrix)。

data(mtcars)
x<-mtcars
y<-as.matrix(mtcars)

在R Studio中我们可以清楚的看到x和y的区别(虽然如果点开你也许会觉得x与y难道不是一模一样吗),x的type是dataframe的格式,而y是matrix也就是矩阵格式。这两种数据类型有什么差别呢?matrix中的值只能是一个格式,比如都是字符型。而dataframe可以同时支持不同的类型比如数值型和字符型。

dataframe与matrix

2)如何做图

本节用一个不是那么生物的数据集来展示一下如何做热图。

data("attitude")
Ca <- cor(attitude)

如果直接使用默认的heatmap.2功能我们可以看到:

Ca数据

和平时看到的heatmap有些不一样,中间的这些蓝色的线我们称作“trace”:虚线表示这一列平均值,实线表示与平均值的偏离程度。默认是按照列计算平均等,也可以改为行。但是我们这里的数据是做相关性,所以这些线的意义就不是那么大。图例中也类似,展示了不同颜色对应的值大小,而蓝色的实线是根据数据分布做的密度曲线,虚线是平均值。黑色的线之前我们已经提到过是对数据进行了聚类。

然后我们对图进行一些修改,红色太扎眼换个颜色,把一些不需要的功能去掉。比如聚类比如这些蓝色的线。

data("attitude")
Ca <- cor(attitude)#cor的结果就是矩阵

library(gplots)
library(RColorBrewer)
coul <- colorRampPalette(brewer.pal(8, "PiYG"))(25)#换个好看的颜色
hM <- format(round(Ca, 2))#对数据保留2位小数

heatmap.2(Ca,
trace="none",#不显示trace
col=coul,#修改热图颜色
density.info = "none",#图例取消density
key.xlab ='Correlation',
key.title = "",
cexRow = 1,cexCol = 1,#修改横纵坐标字体
Rowv = F,Colv = F, #去除聚类
margins = c(6, 6),
cellnote = hM,notecol='black'#添加相关系数的值及修改字体颜色
            )

当然也可以按照相同顺序把相关性系数换成pvalue。颜色也可以根据情况进行修改。其他的也可以进一步调整。

本文分享自微信公众号 - 优雅R(elegant-r),作者:蒋刘一琦

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 「Workshop」第十期:聚类

    聚类分析的思想:对于有p个变量的数据集来说,每个观测值都是p维空间中的一个点,所以属于同一类的点在空间中的距离应该显著小于属于不同类的点之间的距离

    王诗翔呀
  • 「R」R检验中的“数据是恆量”问题

    这是一般做基因差异表达分析在使用t检验或者其他统计检验中常出现的一个问题。之前我学习和自己分析时就遇到过,尝试使用判断的方式事先检查它是不是数据存在问题(这类数...

    王诗翔呀
  • 「R」聚类分析

    文中公式有问题,有需要阅读原文 https://www.jianshu.com/p/18dd0ce65bb8

    王诗翔呀
  • Apache+PHP测试环境搭建

    4. 如图,下载页面有V15和V14两个版本,下载的时候要牢记版本,此处Apache安装版本需与之后的PHP选择一致

    7089bAt@PowerLi
  • 密度聚类DBSCAN、HDBSCAN

    DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方...

    用户1621453
  • R语言数据分析与挖掘(第九章):聚类分析(1)——动态聚类

    在R语言中,用于实现k-means聚类的函数为kmeans(),其的数的基本书写写格式为:

    DoubleHelix
  • NBA球星泄密:Magic Leap产品形状酷似墨镜

    VRPinea
  • 正则表达式和 CPU 100%有什么故事?

    纯洁的微笑
  • 一个正则表达式酿成的惨案…

    导读:正则表达式是程序员经常使用的工具之一。本文作者通过一个正则表达式的陷阱,先深入剖析了出现问题的原因,后给出怎么处理这类问题的方法。最后还给出了一些检测常见...

    Java技术栈
  • 藏在正则表达式里的陷阱

    前几天线上一个项目监控信息突然报告异常,上到机器上后查看相关资源的使用情况,发现 CPU 利用率将近 100%。通过 Java 自带的线程 Dump 工具,我们...

    Java团长

扫码关注云+社区

领取腾讯云代金券