专栏首页生信补给站ComplexHeatmap|绘制单个热图-I

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, blue
Heatmap(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 object
Heatmap(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

PS:有个交流的讨论组,想沟通交流的,后台回复”入群“。

◆ ◆ ◆ ◆ ◆

精心整理(含图PLUS版)|R语言生信分析,可视化(R统计,ggplot2绘图,生信图形可视化汇总)

本文分享自微信公众号 - 生信补给站(Bioinfo_R_Python),作者:生信补给站

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-06-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ComplexHeatmap包更新支持pheatmap转换

    pheatmap是热图中使用频率比较高一个R包,ComplexHeatmap:用于绘制、注释和排列复杂热图。现在ComplexHeatmap 迎来新版本升级,支...

    生信菜鸟团
  • 用 ComplexHeatmap 包绘制复杂热图

    在 ComplexHeatmap 中单个热图由热图主体和热图组件组成。热图主体可按行或列进行拆分。热图组件包括标题,进化树,矩阵名称和热图注释,可分别放置于热图...

    生信菜鸟团
  • 利用ComplexHeatmap绘制热图(一)

    作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源。

    生信宝典
  • ComplexHeatmap |理解绘图逻辑绘制热图

    作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源。

    生信宝典
  • 使用ComplexHeatmap绘制3D热图

    ComplexHeatmap包有一个densityHeatmap()函数用来对一组分布进行可视化。例如下面的例子:

    王诗翔呀
  • 一文详解如何用 R 语言绘制热图

    AI 研习社按:作为目前最常见的一种可视化手段,热图因其丰富的色彩变化和生动饱满的信息表达被广泛应用于各种大数据分析场景。同时,专用于大数据统计分析、绘图和可视...

    AI研习社
  • R语言复杂热图的绘制

    大家对热图应该都不陌生,但是混合的复杂热图在我们的应用中并不是太多见。今天给大家介绍一个绘制复杂热图的R包ComplexHeatmap。

    一粒沙
  • 热图在单细胞数据分析中的应用

    热图是一个以颜色变化来显示数据的可视化矩阵,Toussaint Loua在1873年就曾使用过热图来绘制对巴黎各区的社会学统计。我们就拿这张简单朴素的热图来讲一...

    生信技能树jimmy
  • TCGA|根据somatic mutation绘制突变景观图(oncoplot)和基因词云

    使用 XENA下载的TCGA-LAML.mutect2_snv.tsv文件绘制基因词云和突变景观图。

    西游东行
  • R 热图绘制heatmap①

    用户1359560
  • R 语言绘制热图的 10 种方法

    说在前面 此前我们已经推送了不少深入解读的文章,今天希望做一点新的尝试——介绍 R 语言绘图。这一期分享 R 语言绘制热图的案例,希望大家通过案例感受 R 语言...

    企鹅号小编
  • R绘制甲基化和表达谱联合分析热图

    随着时代的发展,单一研究转录组、蛋白代谢、甲基化等已经难以满足研究者越来越高的研究期望,大家更多地期望联合多种数据进行多组学联合分析。那么这时候,一种好的展示结...

    生信交流平台
  • ComplexHeatmap|根据excel表绘制突变景观图(oncoplot)

    https://github.com/jokergoo/ComplexHeatmap

    西游东行
  • 我以为热图只能画数值型数据,万万没想到...

    今天在群里看到一个非常漂亮的热图,我以为是什么奇怪的新R包画的,转了一圈发现原来还是大名鼎鼎的ComplexHeatmap丫。今天的代码都是在作者写的书基础上探...

    科研菌
  • 羡慕高分文章美图?这26款好看的可视化R包助你一臂之力

    本文将简要盘点R中常用的可视化包,并通过简要介绍包的特点来帮助读者深入理解可视化包。

    生信交流平台
  • 绘制热图

    colormap <- colorRampPalette(rev(brewer.pal(n = 7, name = "RdYlBu")))(100)

    爱学习的小明明
  • pheatmap绘制热图

    画热图的包有很多个,热图的绘制是作为科研人员的基本素养,绘制热图的包我知道的有5个,heatmap函数、ggplot2包、gplot包、lattice包。今天初...

    黑妹的小屋
  • 热图绘制-pheatmap

    新买的蓝牙耳机到了,试了试感觉还不错,低音也非常出色,窗外的颜色变得丰富了起来,看着街角那家咖啡店,仿佛回到了昨天,血色染红的天空在斑斓的世界之上,我匆匆茫茫的...

    Dr_Zhong
  • 生信代码:绘制基因组突变全景图

    对于基因组突变全景图相信大家并不陌生,它是基因组学突变数据最基本的可视化展示方法之一。一张漂亮的,高大上的基因突变全景图不仅能展示出丰富的信息,还能为你的文章增...

    科研菌

扫码关注云+社区

领取腾讯云代金券