热图如何绘制-complexheatmap绘制热图
2023-06-28 · 百度认证:重庆猪八戒网络有限公司官方账号
公众号链接:
热图是做分析时常用的展示方式,简单、直观、清晰。可以用来显示基因在不同样品中表达的高低、表观修饰水平的高低等。任何一个数值矩阵都可以通过合适的方式用热图展示。
本篇使用R的ggplot2包实现从原始数据读入到热图输出的过程,并在教程结束后提供一份封装好的命令行绘图工具,只需要提供矩阵,即可一键绘图。
上一篇讲述了Rstudio的使用作为R写作和编译环境的入门,后面的命令都可以拷贝到Rstudio中运行,或写成一个R脚本,使用Rscriptheatmap.r运行。我们还提供了Bash的封装,在不修改R脚本的情况下,改变参数绘制出不同的图形。
绘图首先需要数据。通过生成一堆的向量,转换为矩阵,得到想要的数据。
注意:运算符的优先级。
Vector转为矩阵(matrix),再转为数据框()。
虽然方法比较繁琐,但一个数值矩阵已经获得了。
还有另外2种获取数值矩阵的方式。
可以看到列名字中以数字开头的列都加了
X
。一般要尽量避免行或列名字以
数字开头
,会给后续分析带去一些困难;另外名字中出现的非字母、数字、下划线、点的字符都会被转为
点
,也需要注意,尽量只用字母、下划线和数字。
与上一步类似,只是改为文件名,不再赘述。
数据读入后,还需要一步格式转换。在使用ggplot2作图时,有一种长表格模式是最为常用的,尤其是数据不规则时,更应该使用(这点,我们在讲解箱线图时再说)。
数据转换后就可以画图了,分解命令如下:
热图出来了,但有点不对劲,横轴重叠一起了。一个办法是调整图像的宽度,另一个是旋转横轴标记。
设置想要的颜色。
调整legend的位置。
调整背景和背景格线以及X轴、Y轴的标题。
合并以上命令,就得到了下面这个看似复杂的绘图命令。
图形出来了,就得考虑存储了,
至此,完成了简单的heatmap的绘图。但实际绘制时,经常会碰到由于数值变化很大,导致颜色过于集中,使得图的可读性下降很多。因此需要对数据进行一些处理,具体的下次再说。
complexheatmap绘制热图通过Heatmap我们就可以形成单个热图。
PS:colorRamp2默认的使用的配色方案是LAB的。如果想使用RGB的则可以通过其中的space参数进行修改。
*1、即使出现了异常值,在制定的颜色当中,异常值也只是显示最大值而不是说是把整体的颜色分布给破坏了。我们可以比较一下pheatmap和Heatmap的结果
如果数据当中含有缺失值,如果我们不想去掉想要可视化的话,可以通过na_col来指定颜色
通过上图,我们可以使用对热图的四周都可以进行标题注释。
无监督的聚类属于热图的可视化的一个重要组成部分。
分类聚类只要包括两步:计算距离矩阵以及应用聚类。一般来说计算距离的方式包括pearson,spearman以及kendall。这个计算方式是通过1--cor(x,y,method)来实现的。在函数当中则是通过clustering_distance_rows/columns来进行实现的。
*2、cluster_rows分开设置不同的颜色
我们可以通过column/row_dend_reorder来对聚类的结果进行重新排序
一般情况下,热图当中各个观测值的顺序是基于聚类的分组来进行排列的。有时候我们想要自己排序顺序。这个时候就可以自定义去顺序。通过row_order/column_order可以来定义其排序。PS:当我们自定义顺序之后,聚类的顺序就随之关闭了。
默认情况下对于列名和行名都是显示的。我们可以对其进行自定义
热图的分割主要包括多种方式
一般的热图上都是方块形的颜色的变化。我们可以通过cell_fun参数来对热图本身进行自定义。这个参数本质是一个for循环的函数。这个接受7个参数分别是:-j矩阵当中行的索引。-i矩阵当中的列的索引。-x在热图当中测量点的X坐标-y在热图当中测量点单元格Y的坐标-width单元格的宽度。默认值是unit(1/nrow(sub_mat),"npc")-height单元格的高度。默认值是unit(1/nrow(sub_mat),"npc")-fill单元格的颜色。通过一个简单的例子我们来详细说一下具体的含义
上述两个热图的区别就在于增加了一个cell_fun参数。通过比较两个热图可以明白cell_fun本质上就是给单元格自定义。这个例子当中,通过自定义函数,我们取small_mat1的数据放到热图上。放的位置及基于i,j,x,y来决定的。这个例子当中四个参数都没有变化。所以默认热图的数据集和自定义的数据集和变化是一样的。即:在small_data[1,1]的位置放置small_data1[1,1]的内容。以此类推。
由于是函数嘛,所以可以更加的自定义数据了。比如加入if来筛选数据
同样的由于自定义绘图也是基于grid系统的。所以grid系统另外一些绘图参数也是可以使用的。所以我们可以隐藏默认的热图显示来定义不同的图形。
我们可以通过width和height来调整整体图片的大小。通过heatmap_width以及heatmap_height来调整热图部分的大小。
生活很好,等你超越
宏基因组,代谢组:高分文章中物种与代谢物相关性热图是怎么画的?测序行业的蓬勃发展,带来微生物组学日新月异的变化。目前,单一组学的文章不断“贬值”,前沿研究的目光从单一组学逐步拓展至多组学对贯穿分析,即结合多个组学的分析角度,从多个层面阐述生物学机制。
微生物多组学贯穿分析策略十分丰富:如常见的16s与宏基因组贯穿分析,可以验证物种的特征、丰富功能的探究;而16s与代谢组的贯穿分析思路同样常见于高分文章中,通过16s探究不同处理/环境下菌群的物种组成变化,结合代谢组对应的代谢物的变化,进而找到不同处理/环境下引发细菌丰度差异最终导致代谢表型差异的机制。参考阅读《选好思路和方法,给自己一篇多组学高分文章》
在16s与代谢组贯穿分析中,相关性热图是一个重要的分析手段,主要用于逐一呈现细菌物种与代谢物间的相关性高低,是筛选潜在关联的物种与代谢物的主要途径,对于下游的实验起到指导意义。此类相关性热图在高分文章中频繁出现,足见其重要性(图1、图2)。
图1物种代谢物热图(2015,CellHost&Microbe,IF=15.753)[1]
图2物种代谢物热图(2018,NatureMedicine,IF=30.641)[2]
那么,该如何画出此类高分文章中的相关性热图呢?这里,以16s与代谢组的数据为例,向大家分享如何使用R语言进行两个组学数据的相关性计算、绘制相关性热图。
1.加载R包
library(psych)
library(pheatmap)
library(reshape2)
2.读入数据
phy<-(file="",sep="t",header=T,=1)
图3微生物丰度信息表格
met<-(file="",sep="t",header=T,=1)
图4代谢物丰度信息表格
3.计算相关性、p值
cor<-(phy,met,method="pearson",adjust="none")
cmt<-cor$r
pmt<-cor$p
head(cmt)
head(pmt)
4.数据保存
<-cbind(rownames(cmt),cmt)
(,file="",sep="t",=F)
图5相关性系数表格
<-cbind(rownames(pmt),pmt)
(,file="",sep="t",=F)
图6p值表格
df<-melt(cmt,="cor")
df$pvalue<-(pmt)
head(df)
(df,file="",sep="t")
图7关系对信息
5.绘制显著性标记
if(!(pmt)){
ssmt<-pmt<0.01
pmt[ssmt]<-'**'
smt<-pmt>0.01&pmt<0.05
pmt[smt]<-'*'
pmt[!ssmt&!smt]<-''
}else{
pmt<-F
}
6.绘制相关性热图
mycol<-colorRampPalette(c("blue","white","tomato"))(800)
pheatmap(cmt,scale="none",cluster_row=T,cluster_col=T,border=NA,
display_numbers=pmt,fontsize_number=12,number_color="white",
cellwidth=20,cellheight=20,color=mycol)
图8R语言绘制的物种+代谢物相关性热图
pheatmap(cmt,scale="none",cluster_row=T,cluster_col=T,border=NA,
display_numbers=pmt,fontsize_number=12,number_color="white",
cellwidth=20,cellheight=20,color=mycol,filename="")
参考文献
[1]KosticAD,GeversD,SiljanderH,etal.Thedynamicsofthehumaninfantgutmicrobiomeindevelopmentandinprogressiontowardtype1diabetes.CellHostMicrobe.2015;17(2):260.1016/j.chom.2015.01.001
[2]Hoyles,Lesleyetal.“Molecularphenomicsandmetagenomicsofhepaticsteatosisinnon-diabeticobesewomen.”Naturemedicinevol.24,7(2018):1070-1080.doi:10.1038/s41591-018-0061-3
原文