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

在生物信息领域我们常常使用 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<-mtcarsy<-as.matrix(mtcars)

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

dataframe 与 matrix

2)如何做图

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

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

Ca 数据

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

和平时看到的 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", ‍#不显示tracecol=coul, ‍#修改热图颜色density.info = "none", ‍#图例取消densitykey.xlab ='Correlation',key.title = "",cexRow = 1,cexCol = 1, ‍#修改横纵坐标字体Rowv = F,Colv = F, ‍#去除聚类margins = c(6, 6),cellnote = hM,notecol='black' ‍#添加相关系数的值及修改字体颜色 )


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

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

R 数据可视化 : 热图的更多相关文章

  1. 基于matplotlib的数据可视化 - 热图imshow

    热图: Display an image on the axes. 可以用来比较两个矩阵的相似程度 mp.imshow(z, cmap=颜色映射,origin=垂直轴向) imshow( X, cma ...

  2. 推荐《R数据可视化手册》高清英文版PDF+中文版PDF+源代码

    绝大多数的绘图案例都是以强大.灵活制图而著称的R包ggplot2实现的,充分展现了ggplot2生动.翔实的一面.从如何画点图.线图.柱状图,到如何添加注解.修改坐标轴和图例,再到分面的使用和颜色的选 ...

  3. R 数据可视化: PCA 主成分分析图

    简介 主成分分析(Principal Component Analysis,PCA)是一种无监督的数据降维方法,通过主成分分析可以尽可能保留下具备区分性的低维数据特征.主成分分析图能帮助我们直观地感受 ...

  4. R语言学习 - 热图美化

    实际应用中,异常值的出现会毁掉一张热图.这通常不是我们想要的.为了更好的可视化效果,需要对数据做些预处理,主要有对数转换,Z-score转换,抹去异常值,非线性颜色等方式. 对数转换 为了方便描述,假 ...

  5. R语言学习 - 热图简化

    绘制热图除了使用ggplot2,还可以有其它的包或函数,比如pheatmap::pheatmap (pheatmap包中的pheatmap函数).gplots::heatmap.2等.   相比于gg ...

  6. R语言学习 - 热图绘制heatmap

    生成测试数据 绘图首先需要数据.通过生成一堆的向量,转换为矩阵,得到想要的数据. data <- c(1:6, 6:1, 6:1, 1:6, (6:1)/10, (1:6)/10, (1:6)/ ...

  7. 手把手教你做一个python+matplotlib的炫酷的数据可视化动图

    1.效果图 2.注意: 上述资料是虚拟的,为了学习制作动图,构建的. 仅供学习, 不是真实数据,请别误传. 当自己需要对真实数据进行可视化时,可进行适当修改. 3.代码: #第1步:导出模块,固定 i ...

  8. g2蚂蚁数据可视化折线图,点位坐标label 图形文本设置

    应用g2可视化插件画了个粉丝分析图 要求显示如图所见的节点参数,查看文档蚂蚁图形文本设置,得知需要引入如下代码: chart.point().position('update*praises').la ...

  9. WPF数据可视化-瀑布图

    实现方式一: 将数据(Point[])根据索引沿X轴使用虚拟画布进行绘制,每个数据绘制大小为1px * 1px:最终绘制出的宽度等于数据的总长度.标记并存储当前绘制的图为PreviousBitmap; ...

  10. WPF数据可视化-趋势图

    环境: 系统: Window 7以上: 工具:VS2013及以上. 研发语言及工程: C# WPF 应用程序 效果: ​ ​ 简介: 不需要调用第三方Dll, 仅仅在WPF中使用贝塞尔曲线,不到500 ...

随机推荐

  1. Treemap按key和value降序排序

    Treemap是一种根据键排序的数据结构,可以通过重载它的比较器来按照值排序.要按键排序,可以使用默认的比较器,而要按值排序,可以创建一个自定义的比较器并将其传递给treemap的构造函数. 以下是按 ...

  2. go语言之UDP通信

    服务端 package main import ( "fmt" "net" ) func main() { listen, err := net.ListenU ...

  3. 官方文档 | 【JVM调优体系】「GC底层调优实战」XPocket为终结性能问题而生—开发指南

    XPocket 用户文档 XPocket 是PerfMa为终结性能问题而生的开源的插件容器,它是性能领域的乐高,将定位或者解决各种性能问题的常见的Linux命令,JDK工具,知名性能工具等适配成各种X ...

  4. AcWing刷题记录 - 2022

    AcWing 1813. 方块游戏 思路 枚举,题目说明不管哪一面向上都可以,所以就两面加起来取各个字母的最大值,最后N对字母的最大值相加就是答案 代码 #include<bits/stdc++ ...

  5. java -- Object类和String类

    Object类 java.lang.Object类是Java语言中的根类,每个类都使用 Object 作为超类, 所有的类都直接或间接继承自 Object 类.所有对象(包括数组)都实现这个类的方法. ...

  6. [Linux]Linux执行sh脚本时,出现$‘\r‘: command not found(未找到命令)"错误的解决方案[转载]

    1 文由 为什么要把这么一个看似很简单的问题,还要以[转载]的方式专门用博客写出来? 主要是在编写crontab的自动化定时脚本的过程中,发现是这个错导致的自动化脚本频繁执行异常时,已经花了好几个小时 ...

  7. oracle数据对比--用户,索引,分区,dblink,同义词,视图

    问题描述:需要对比用户数据一般在数据库迁移之后,需要对比一下两个库之间的差距,如果登上去一条命令的执行,去统计,就会比较麻烦,这里整理了一些脚本可用.通过创建dblink的方式快速查询,也可以整合到一 ...

  8. AI人工智能简史

    AI人工智能简史 最近学习AI,顺便整理了一份AI人工智能简史,大家参考: 1951年 第一台神经网络机,称为SNARC: 1956年 达特茅斯学院会议,正式确立了人工智能的研究领域: 1966年 M ...

  9. 当 Amazon Lambda 遇上 Apache APISIX 可以擦出什么火花?

    本文首先介绍了什么是 Serverless,以及为什么需要 Serverless:其次,讲述了一个好的网关在 Serverless 架构下的重要性,而 APISIX 就是这样的一个网关:最后,本文重点 ...

  10. 如何在 .NET Core WebApi 中处理 MultipartFormDataContent 中的文件

    在上一篇文章(如何在 .NET Core WebApi 中处理 MultipartFormDataContent)中,我们有描述过如何以最简单的方式在 .NET Core WebApi 中处理 Mul ...