只要两分钟!小花让你画出不一样的热图Heatmap!!






只要两分钟!小花让你画出不一样的热图Heatmap!!

小花  生信果  2023-09-05 19:00:30

点击蓝字 关注我们

小伙伴平时在做差异分析,或者免疫浸润,基因的表达差异的时候可能都需要用到热图去展示表达量的信息是否正相关或者负相关。因此小伙伴们应该了解很多,也见过各种各样的。当然,我们平时最常见的不过就是方方正正的矩阵,还有就是气泡形式的热图。今天,小花给小伙伴介绍一种圈图形式的热图。看起来会跟高大上!这样看起来,小伙伴放在文章里面说不定一眼就吸引住读者的注意,我们先看看效果:


小伙伴会发现这个热图中有基因的名字也有样本的名称,中间有聚类的结果,正常的热图内容这个圆圈的热图应有尽有。这样的结果小伙伴有没有心动呢。那就跟着小花去学习一下如何绘制的吧

在这里小花使用的是实例数据给大家展示,小伙伴可以根据小花数据形式,准备一下自己的数据。

#首先exp_symbol <- read.table("E:\生信花\date.txt",#header = T ,sep = "t" , # 指定第一行是列名)#先把数据导入


小伙伴按照图中的数据形式可以去准备

接下来把数据处理一下,因为有的小伙伴的数据并不是统一的,可能层次不齐,我们就需要把数据归一化处理。为后续热图显示做准备

mat1<-exp_symbolrow.names(mat1) <- mat1[, 1]mat1<- mat1[, -1]mat1 <- as.matrix(mat1)#这里把Symbol列放在软件中格式的第一列中cir1<-t(scale(t(mat1)))head(cir1) #查看数据#转化matrix格式矩阵及数据归一化


mat1 <- as.matrix(mat1)cir1<-t(scale(t(mat1)))head(cir1)mat1<-cir1


这里把处理好的cir1矩阵赋值给mat1,使用mat1做下面处理

#install.packages("circlize")#install.packages("ComplexHeatmap")#BiocManager::install("ComplexHeatmap")没有这两个包的小伙伴要下载一下,后面绘图我们需要这样两个包进行绘制。library(circlize)library(ComplexHeatmap)#接下来就去绘制热图-circoheatmapcol_fun1 = colorRamp2(c(-2, 0, 2), c("navy", "white", "firebrick3"))circos.heatmap(mat1, col = col_fun1,dend.side = "inside",rownames.side = "outside")#这里用于绘制legendlgd = Legend(title = "mat1", col_fun = col_fun1)grid.draw(lgd)circos.clear()#小伙伴一定要注意加上这个表示热图绘制完毕


这样热图的雏形就出来了,但是还没有完成,我们发现还没有基因的名字,下面我们把基因名字加上去,但是小伙伴发现圆圈中间的空隙太小,如果把基因放进去,肯定会看不清,所以我们要把中间空出来一下:

col_fun1 = colorRamp2(c(-2, 0, 2), c("navy", "white", "firebrick3"))circos.par(gap.after = c(40))#这里代码就是空出一段用于添加label,大小小伙伴们可以自己修改,这里的大小只是演示。circos.heatmap(mat1, col = col_fun1,dend.side = "inside",rownames.side = "outside",track.height = 0.4)


这样接下来就可以把基因加上去了。我们接着来运行:

circos.track(track.index = get.current.track.index(), panel.fun = function(x, y) {if(CELL_META$sector.numeric.index == 1) { # the last sectorcn = colnames(mat1)n = length(cn)circos.text(rep(CELL_META$cell.xlim[2], n) + convert_x(0.1, "mm"), #x坐标1:n+5,#y坐标cn, #标签cex =1, adj = c(0, 1), facing = "inside")}}, bg.border = NA)#这里需要用到if语句进行判断,


这样看名字就加上去了,但是发现还有有点紧凑,小伙伴可以按照参数调整一下。

但是发现还少了点东西,legend信息没有加上去,

lgd = Legend(title = "mat1", col_fun = col_fun1)grid.draw(lgd)circos.clear()

这样就大功告成了,小伙伴对图中的样式颜色可以按照参数修改成自己喜欢的样式。这样的热图形式,有没有小伙伴心动呢,还不快去试试!

小花在这里提示一下,小伙伴要注意代码的意思,去修改成自己图片。


欢迎使用:云生信  – 学生物信息学 (biocloudservice.com)


如果想用服务器可以联系微信:18502195490(快来联系我们使用吧!)



(点击阅读原文跳转)

 点一下阅读原文了解更多资讯