超详细的R语言热图之complexheatmap系列(1) 您所在的位置:网站首页 r语言热图旁边的标识 超详细的R语言热图之complexheatmap系列(1)

超详细的R语言热图之complexheatmap系列(1)

2023-12-19 23:05| 来源: 网络整理| 查看: 265

获取更多R语言和生信知识,请关注公众号:医学和生信笔记。 

公众号后台回复R语言,即可获得海量学习资料!

目录

第一章 简介

1.1 设计理念

1.2 各章节速览

第二章 单个热图

2.1 颜色

2.2 行标题/列标题

2.3 聚类

2.3.1 距离计算方法

2.3.2 聚类方法

2.3.3 自定义聚类树颜色

2.3.4 重新排列聚类树

2.4 改变行/列顺序

2.5 Seriation包排序

2.6 行名/列名

2.7 热图分割

2.7.1 通过K-means方法分割

2.7.2 通过离散型变量分割

2.7.3 通过聚类树分割

2.7.4 切片顺序

2.7.5 分割标题

2.7.6 分割的图形参数

2.7.7 分割宽度

2.7.8 分割注释条

2.8 光栅图(略)

2.9 自定义热图主体

2.9.1 cell_fun

2.9.2 layer_fun

2.10 热图大小

本系列是对ComplexeHeatmap包的学习笔记,部分内容根据自己的理解有适当的改动,但总体不影响原文。如有不明之处,以原文为准。原文请见:ComplexHeatmap Complete Reference

第一章 简介

复杂热图可用于展示同一个数据集或不同数据集之间的关系或揭示内部规律。ComplexHeatmap包可提供灵活的热图展示及高度自定义的注释图形。

1.1 设计理念

一个完整的热图由热图主体和热图组件构成。热图主体可以被分为不同的行和列,热图组件包括行/列标题,聚类树,行名/列名,行注释条/列注释条。

热图列表由多个热图主体和热图注释组成,但不同的热图主体和注释被有序排列,使得彼此之间具有较好的可比性。

ComplexHeatmap包是面向对象的,主要包括以下类:

Heatmap class: 单个热图,包括热图主体,行名/列名,标题,聚类树,行注释条/列注释条;

HeatmapList class: 多个热图主体和热图注释;

HeatmapAnnotation class: 定义一系列的行注释/列注释,这些注释既可以作为热图组件,又可以独立于热图;

还有一些其他类:

SingleAnnotation class: 定义单个行注释/列注释,包含在 HeatmapAnnotation class中;

ColorMapping class: 映射颜色,包括热图主体颜色和各种注释的颜色

AnnotationFunction class: 创建用户自定义的注释 ComplexHeatmap是基于grid的,充分利用此包需要用户了解grid绘图系统的知识。

1.2 各章节速览

2. 单个热图

介绍单个热图的组成

3. 热图注释

热图注释概念,如何绘制简单注释和复杂注释,简单注释和复杂注释的不同

4. 热图列表

如何绘制多个热图和注释,它们的位置排布是怎样安排的

5. 图例

如何绘制热图主体和注释条的图例,如何自定义图例

6. 热图装饰

如何添加用户自定义图形

7. 瀑布图

8. UpSet plot

9. 其他高阶图形

10. 和其他R包交互

11. 交互式热图

12. 更多例子

第二章 单个热图

单个热图是最常见的可视化图形,虽然ComplexHeatmap包的闪光点是可以同时绘制多个热图,但是作为基本图形,对单个热图的绘制也是很重要的。

首先随机生成一个矩阵

set.seed(123) nr1 = 4; nr2 = 8; nr3 = 6; nr = nr1 + nr2 + nr3 nc1 = 6; nc2 = 8; nc3 = 10; nc = nc1 + nc2 + nc3 mat = cbind(rbind(matrix(rnorm(nr1*nc1, mean = 1,   sd = 0.5), nr = nr1),          matrix(rnorm(nr2*nc1, mean = 0,   sd = 0.5), nr = nr2),          matrix(rnorm(nr3*nc1, mean = 0,   sd = 0.5), nr = nr3)),    rbind(matrix(rnorm(nr1*nc2, mean = 0,   sd = 0.5), nr = nr1),          matrix(rnorm(nr2*nc2, mean = 1,   sd = 0.5), nr = nr2),          matrix(rnorm(nr3*nc2, mean = 0,   sd = 0.5), nr = nr3)),    rbind(matrix(rnorm(nr1*nc3, mean = 0.5, sd = 0.5), nr = nr1),          matrix(rnorm(nr2*nc3, mean = 0.5, sd = 0.5), nr = nr2),          matrix(rnorm(nr3*nc3, mean = 1,   sd = 0.5), nr = nr3))   ) mat = mat[sample(nr, nr), sample(nc, nc)] # random shuffle rows and columns rownames(mat) = paste0("row", seq_len(nr)) colnames(mat) = paste0("column", seq_len(nc)) dim(mat) ## [1] 18 24

Heatmap()函数是绘制热图的基本函数,它会绘制一个热图主体,行名,列名,聚类树和注释。默认的颜色是黄色系的。

library(ComplexHeatmap) ## 载入需要的程辑包:grid ## ======================================== ## ComplexHeatmap version 2.8.0 ## Bioconductor page: http://bioconductor.org/packages/ComplexHeatmap/ ## Github page: https://github.com/jokergoo/ComplexHeatmap ## Documentation: http://jokergoo.github.io/ComplexHeatmap-reference ## ## If you use it in published research, please cite: ## Gu, Z. Complex heatmaps reveal patterns and correlations in multidimensional ##   genomic data. Bioinformatics 2016. ## ## The new InteractiveComplexHeatmap package can directly export static ## complex heatmaps into an interactive Shiny app with zero effort. Have a try! ## ## This message can be suppressed by: ##   suppressPackageStartupMessages(library(ComplexHeatmap)) ## ======================================== heatmap(mat)

plot of chunk unnamed-chunk-2

2.1 颜色

对于热图可视化,颜色是数据矩阵的主要表示形式。在大多数情况下,热图用于可视化连续数值矩阵。在这种情况下,用户应提供颜色映射功能。颜色映射函数接受数值型向量,并返回对应的颜色向量。用户应始终使用circlize::colorRamp2()函数在Heatmap()中生成颜色映射。colorRamp2()的两个参数是离散型数值向量和对应的颜色向量。colorRamp2()通过LAB颜色空间在每个间隔内线性插值颜色。另外,使用colorRamp2()有助于生成带有适当刻度线的图例。

在以下示例中,线性插值-2和2之间的值以获得相应的颜色,大于2的值都映射为红色,小于-2的值都映射为绿色。

library(circlize) ## ======================================== ## circlize version 0.4.13 ## CRAN page: https://cran.r-project.org/package=circlize ## Github page: https://github.com/jokergoo/circlize ## Documentation: https://jokergoo.github.io/circlize_book/book/ ## ## If you use it in published research, please cite: ## Gu, Z. circlize implements and enhances circular visualization ##   in R. Bioinformatics 2014. ## ## This message can be suppressed by: ##   suppressPackageStartupMessages(library(circlize)) ## ======================================== col_fun = colorRamp2(c(-2, 0, 2), c("green", "white", "red")) col_fun(seq(-3, 3)) ## [1] "#00FF00FF" "#00FF00FF" "#B1FF9AFF" "#FFFFFFFF" "#FF9E81FF" "#FF0000FF" ## [7] "#FF0000FF" Heatmap(mat, name = "mat", col = col_fun)

plot of chunk unnamed-chunk-4

使用colorRamp2()可以精确控制颜色映射范围,并且不会受到极端值的影响。

mat2 = mat mat2[1, 1] = 100000 Heatmap(mat2, name = "mat", col = col_fun, column_title = "a matrix with outliers")

plot of chunk unnamed-chunk-5

另外,使用colorRamp2()可以使得多个热图之间的颜色具有可比性,如下所示,在3个热图中,相同的颜色总是对应相同的数值:

p1


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有