ComplexHeatmap|绘制单个热图-I

ComplexHeatmap可以绘制很复杂的热图,能满足日常以及文章所需,本次先简单的介绍单个热图绘制的内容。

单个热图由热图主体和热图组件组成。其中主体可分为行和列;组件可以是标题、树状图、矩阵名称和热图注释,在主图的四周均可,且顺序可调整。

一 载入数据,R包

1.1 载入ComplexHeatmap包

#if (!requireNamespace("BiocManager", quietly = TRUE))# install.packages("BiocManager")#BiocManager::install("ComplexHeatmap")library(ComplexHeatmap)

1.2 载入数据

为更贴近生信使用场景,直接使用内置的基因表达数据

expr = readRDS(paste0(system.file(package = "ComplexHeatmap"), "/extdata/gene_expression.rds"))#查看数据str(expr)expr[1:4,c(1:4,25:27)]

拿到一个新数据后,除了检查[1:4,1:4]外,也许还需要看看最后几列,另外还需要观察列名称的规律。

去除最后几列,或者只选取列名字包含cell的(TCGA数据处理中也会经常遇到)

mat = as.matrix(expr[, grep("cell", colnames(expr))])

1.3 绘制最简单的热图

Heatmap(mat)

可以看到有很多需要“美化”的地方,别急,一点点来。

二 热图修饰

2.1 颜色

1)连续型变量

可以使用circle::colorRamp2()函数来生成Heatmap()中的颜色映射函数,输入参数为分割位置以及分割点上的颜色。下例中,大于12的值都映射为红色,小于12的值映射为绿色;

library(circlize)#c中的范围要根据实际情况设置col_fun = colorRamp2(c(8, 12, 16), c("green", "white", "red"))Heatmap(mat, name = "mat", col = col_fun)
2)分类型变量

更改分类变量的颜色,需要把所有分类的数字均进行赋值。

discrete_mat = matrix(sample(1:4, 100, replace = TRUE), 10, 10)colors = structure(1:4, names = c("1", "2", "3", "4")) # black, red, green, blueHeatmap(discrete_mat, name = "mat", col = colors, column_title = "a discrete numeric matrix")

更多颜色修改请参考官方文档,文末的参考资料的链接。

2.2 标题

1)设置行,列和图例的标题

Heatmap(mat, name = "legend title", #图例title column_title = "I am a column title", #列title row_title = "I am a row title", column_title_side = "bottom") #行title

2)设置标题的位置,颜色,字体,大小

Heatmap(mat, name = "mat", row_title = "row title", row_title_rot = 0, #旋转方向 column_title = "I am a big column title", column_title_side = "bottom", #标题位置 column_title_gp = gpar(fontsize = 20, fontface = "bold",col = "red")) #颜色,字体,大小

3)设置标题的背景

column_title_gp中的填充参数来设置标题的背景颜色

Heatmap(mat, name = "mat", column_title = "I am a column title", column_title_gp = gpar(fill = "red", col = "white", border = "blue"), )

2.3 聚类

聚类是热图可视化的关键组成部分,在ComplexHeatmap包中可以非常灵活的进行设置。

A:一般设置

cluster_rows/columns :是否进行聚类

show_column/row_dend :是否显示聚类树

column/row_dend_side :聚类图绘制的位置

column_dend_height/row_dend_widht :聚类树的高度 和 宽度

Heatmap(mat, name = "mat", cluster_columns = T, cluster_rows = F, ## turn off row clustering show_column_dend = T, ## hide column dendrogram show_row_dend = F, column_dend_side = "top", #dendrogram location column_dend_height = unit(4, "cm"))

注意:聚类树的高度 和 宽度有区别。

B:距离方法

可选计算距离的方式包括pearson, spearman以及kendall , 或者计算距离的自定义函数。

Heatmap(mat, name = "mat", clustering_distance_rows = "pearson", column_title = "pre-defined distance method (1 - pearson)")

2)自定义

Heatmap(mat, name = "mat", clustering_distance_rows = function(x, y) 1 - cor(x, y), column_title = "a function that calculates pairwise distance")
C:聚类方法

支持hclust()中的聚类方法。

Heatmap(mat, name = "mat", clustering_method_rows = "single")
D:聚类树的渲染

根据聚类结果将聚类树的枝设置不同的颜色

library(dendextend)row_dend = as.dendrogram(hclust(dist(mat)))row_dend = color_branches(row_dend, k = 4) # `color_branches()` returns a dendrogram objectHeatmap(mat, name = "mat", cluster_rows = row_dend, row_dend_width = unit(4, "cm"))

2.4 设置行列顺序

通过row_order/column_order函数自定义其排序,为方便展示选择前30个基因。

mat <- mat[1:30,]Heatmap(mat, name = "mat", row_order = order(as.numeric(gsub("gene", "", rownames(mat)))), #将gene1替换为1,在排序 column_order = sort(colnames(mat)), column_title = "reorder matrix")

注:此处将gene1,gene10 先替换掉gene(不去的话是按照ASCII码),然后按照数值排序。

参考资料:

https://zhuanlan.zhihu.com/p/363769759

https://jokergoo.github.io/ComplexHeatmap-reference/book/a-single-heatmap.html

(0)

相关推荐

  • ComplexHeatmap绘制热图详细步骤

    pheatmap是一个非常受欢迎的绘制热图的R包.ComplexHeatmap包即是受之启发而来.你可以发现Heatmap()函数中很多参数都与pheatmap()相同.在pheatmap的时代(请允 ...

  • halcon倾斜字体矫正

    演示用图(在画图工具上用斜体写的字体,倾斜度不是很大): halcon代码: *倾斜字体矫正read_image (Image, 'D:/Halcon-WorkSpaces/Test/Image/te ...

  • 今天跟着我把热图学个遍,囊括所有需求

    用于绘制交互式和静态热图的R包和功能很多,包括: heatmap()[R基本函数,统计数据包]:绘制一个简单的热图 heatmap.2()[ gplots R包]:与R base函数相比,绘制了增强的 ...

  • Halcon 二维仿射变换

    二维仿射变换,顾名思义就是在二维平面内,将对象进行平移.旋转.缩放等变换的行为(当然还有其他的变换,这里仅论述这三种最常见的). 仿射变换原理: 进行仿射变换,首先我们仿射变换的对象位置坐标.角度,然 ...

  • 技术贴 | R语言:大样本多组学的相关性计算、热图绘制

    本文由可爱的乔巴根据实践经验而整理,希望对大家有帮助. 原创微文,欢迎转发转载. 导读 上期介绍了利用psych包计算两组小样本的相关性并进行热图可视化,但当样本数据量非常大时,psych包会耗费的时 ...

  • 技术贴 | R语言:小样本多组学的相关性计算、热图绘制

    本文由可爱的乔巴根据实践经验而整理,希望对大家有帮助. 原创微文,欢迎转发转载. 导读 在多组学数据关联挖掘中,在我们筛选到目标基因集以及目标蛋白质集合或目标代谢物集合后,在进行基因与蛋白质或代谢关联 ...

  • 科研软件系列:Graphpad prism作图软件功能与安装方法介绍,以及热图的绘制

    今天,小编想给大家介绍一款好用的分析和作图软件-Graphpad prism,之所以说他好用,是因为这款软件可以直接输入原始数据,自动进行基本的生物统计(计算标准差.标准误和P值等),并产生高质量的图 ...

  • 用Calypso在线绘制热图、树状图及Krona图

    用Calypso在线绘制热图、树状图及Krona图

  • R绘图笔记 | 热图绘制

    关于绘图,前面介绍了一些: R绘图笔记 | 一般的散点图绘制 R绘图笔记 | 柱状图绘制 R绘图笔记 | 直方图和核密度估计图的绘制 R绘图笔记 | 二维散点图与统计直方图组合 R绘图笔记 | 散点分 ...

  • 为什么我代码里面选择top1000的sd基因绘制热图呢

    实际上写完了这个全网最好的差异分析代码:免费的数据分析付费的成品代码 我就可以收工用来,但是永远不能低估粉丝的疑惑数量,任何一个细节都会被拿出来剖析. 比如代码里面我挑选了top1000的sd基因绘制 ...

  • 自己写代码计算单细胞转录组数据的CNV及绘制热图

    前面我们提到过broad开发了工具来对单细胞转录组数据计算CNV及绘制热图,因为这个方法学本来就是他们建立起来的. 单细胞转录组数据分析CNV 使用broad出品的inferCNV来对单细胞转录组数据 ...

  • 使用Excel绘制热图 - 太简单!

    使用Excel绘制热图 事实上,对于大多数生物背景的朋友或者日常工作为湿实验的朋友,最实用,最简单的绘制一张热图或者直观地展示基因表达趋势的方式是使用Excel直接绘制一张热图. 虽然现在已经有很多网 ...