你真的了解热图吗
热图(heatmap)是分⼦⽣物学⽂章⾥(尤其是RNA-seq相关论⽂)经常出现的图⽚。但热图⼀般有哪些⽤途,具体涉及哪些不同的参数画法,不⼀定所有的⼈都清楚。本篇短⽂,我们来说⼀说这个问题。1. 关于热图的⽤途
热图的⽤途⼀般有两个。以RNA-seq为例,热图可以:1)直观呈现多样本多个基因的全局表达量变化;2)呈现多样本或多基因表达量的聚类关系。
第⼀个问题很容易理解,毕竟使⽤颜⾊(例如红绿的深浅)来展⽰多个样本多个基因的表达量⾼低,既直观⼜美观。
第⼆个问题,则需要考虑:你是否要做聚类,是对样本聚类还是对基因聚类。
先介绍需要聚类的情况。例如,对于下图,就是利⽤12个基因的表达量(右侧字符为gene ID)对48个包含正常⼈和病⼈的样本(下⽅字符为样本ID)进⾏聚类的结果。我们很容易观察到图中⼈群在系统关系上(图上⽅的树形结构)分为了两类。由此,我们从中了解了两类⼈群的基因表达模式,并对他们进⾏了分类。如果深⼊⼀点讲,这种聚类本质上利⽤了多组值间两两的差异程度(欧式距离、相关系数等),对多组值进⾏层级聚类,以最终得到样本间聚类的远近关系。
图1 两组⼈12个基因表达的聚类图
因此,如果你关⼼样本(或基因)在检测到的表达量⽔平如何分类,相关关系如何,那么你可以选择聚类。在这⾥,你还可以选择:仅在样本⽔平聚类、仅在基因⽔平聚类或两者都选择(如图1)。
但并⾮任何时候,聚类都是最佳的选择。尤其,当你预先设定好的样本排序或基因排序已经很有⽣物学意义,并且想在最终的图⽚中呈现,就应该放弃聚类。例如,你已经按照⼀个代谢通路对基因排好序,只想通过热图展⽰这条通路上基因的表达量如何变化。因为聚类会将原来很有⽣物学意义的基因排列打乱了。那么选择不聚类,维持原来数据的排序就是最好的选择(如图2)
图2 植物⽣长激素代谢通路热图
2. 热图中绘制软件和参数
如果你对R语⾔有所了解,那么R软件包中的ggplots是不错的选择。如果你不懂这些编程语⾔,也有其他简单易⽤的热图绘制软件供选择,例如我们10⽉30⽇的⽂章中介绍的heml1.0。同时热图绘制中主要涉及的⼏个关键参数,我们最后再介绍⼀下:聚类:
也就是上⽂提到的,是否聚类(是按⾏聚类、按列聚类还是两者都选),⼀般软件有这样的选项。例如在R语⾔ggplots 的heatmap.2 命令中的参数Rowv(⾏聚类)和Colv(列聚类)。数据均⼀化:
⼤家如何仔细看热图,⼀定会发现图旁边⼀般会有⼀个图例(如下图):
图3 热图中的图例
⼤部分热图图例的变化范围极⼩,⼀般是以0为中⼼,变异范围在±3以内。这是由于绘图的数据通常变异范围极⼤。例如RNA的表达量,低丰度的基因的表达量可能在RPKM<10以内。⽽⾼丰度基因则RPKM值可以达到10000+。如果不对数据进⾏均⼀化,很难在同⼀套颜⾊变化幅度范围内展现如此⼤尺度的数值变异。通常,热图软件都可以选择对绘图数值进⾏标准正态分布化(Z score)。也就是将⼀组值通过均⼀化,使其符合均值为0,⽅差为1的标准正态分布。这⾥⼜将涉及到⼀个问题:我们是选择按⾏均⼀化、按列均⼀化还是对所有值均⼀化。 按⾏均⼀化:将每⼀⾏数值分别单独处理,使其符合标准正态分布; 按列均⼀化:将每⼀列数值分别单独处理,使其符合标准正态分布;
对所有值均⼀化:将所有的⾏列数据⼀起处理,使其符合标准正态分布;
不同处理⽅式,背后的意义也会有所不同。例如,如果在聚类过程中,你想让⾼表达的基因对样本的分类起到更⼤的作⽤,那么选择“对所有值均⼀化”也是较好的选择。但通常在热图绘制过程中,我们⼀般是以基因为单位来观测这些表达量数值的变化的。这意味着,这些基因⽆论表达量⾼低,其地位理论上是平等的(⾄少也是相似的)。即,如果A基因表达量从10变化到20,B基因表达量从100变化到200,我们更关⼼它们变化的倍数(都是2倍)⽽不是变化的绝对值(10 vs 190)。那么,我们应该以基因为单位进⾏归⼀化。例如在图1中,每⼀⾏代表⼀个基因,则我们应该选择按⾏进⾏均⼀化。
按基因均⼀化,可以最⼤程度地呈现每⼀个基因的变化信息,避免⼀个超⾼表达的基因掩盖了其他基因的变化。因此,在热图绘制中,这是常⽤的归⼀化策略。