笔记内容:

热图的应用意义

包的安装

scale的作用

作图细节:系统发生树,label, color key的问题等

补充:添加多行ColSideColors

补充:heatmap.3示例

补充:ComplexHeatmap::Heatmap

热图的应用意义

在paper中常常能看到热图(heatmap):“形式为功能服务”。在我们常见的,使用矩阵作为Input的二维热图中,多为基因表达差异,16s分析中不同分组的物种丰度/相对丰度差异提供线索及可视化效果。

使用热图可以直观通过颜色的深浅和差异判断样本/组别之间的差异。结合统计检验的显著性结果,可以评估出显著性的方向。热图可以通过算法生成系统树,表现各个subject及feature的聚类关系。

在R中可以使用gplots包中的heatmap.2轻松画出热图。但对于其scale, 系统树的建立,以及很细节的字体大小,图片大小,color key的数值范围设置,对应的颜色设置等,均需要通过参数的调整实现。虽然比起其他编程工具,R是个封装很严实的软件,这意味着许多参数不能很灵活的去修改。但这不妨碍我们充分使用它带来的便利。

包的安装

install.packages("gplots")

install.packages("RColorBrewer")

install.packages("devtools")

library(devtools)

install.github("stanstrup/massageR")

安装massageR包是为了对热图的input矩阵做一些处理,这个包的安装有些曲折,在win10系统上按照以下两步先安装devtools再通过github装massageR没问题,但是在linux系统上不能在R sutdio里直接这么安装,详见 R使用笔记第11条

在本笔记中不使用massageR包也可以,heatmap.2可以搞定。

scale的作用

plot_color = c('orange','green')[treatment]

# treatment为meta data中提取出的分组信息,必须为一个factor

# 如果在input data中把sampleID整理为分组的顺序,那么会在colsidecolors这里显示为整齐的分为两组。

heatmap.2(x, #Input必须是matrix

trace="none", # trace可以给每个色块中添加一条线,与行平行或者与列平行。其与色块中心的距离代表了这个值被显示的比例。

scale="none", # scale在这里

ColSideColors = plot_color, # 按照treatment组别给每个subject一个颜色

dendrogram = "row", # 生成row的系统发生树

symbreaks = TRUE,

col=rev(colorRampPalette(brewer.pal(10, "RdBu"))(20)), # color key, 后面详叙

breaks = seq(-0.5,0.5,0.05), # 还是color key

density.info=c("none"), # 还是color key

margins=c(8,16), # 调整热图大小比例

cexRow = 0.8, cexCol = 1.0, # 行列名字体大小

srtCol = 45, offsetCol = -0.5 # 调整列名的字体倾斜45度,距离热图的距离缩小。

)

会出现这样的图。很丑,看不出规律。这是因为我们input的矩阵还没有经过标准化(normalized/scaling)。许多值集中在一个很小的范围,突然出现几个很大的值,大得不成比例。导致这种情况:为了照顾那几个极端值,大部分值之间的差异被掩盖掉了,所以留下大片几乎一样的颜色。标准化即经过一定比例控制,将数据的规律保留,并将数值标化在一个相对稳定的范围内,更加便于作图。

但是如果把scale的参数调整为scale="row"

scale = "row" 即针对行进行标化,

作图细节:系统发生树,label,color key的问题等

heatmap.2(x,

trace="none",

scale="none", # scale在这里

ColSideColors = plot_color, # 按照treatment组别给每个subject一个颜色

Rowv = TRUE, # 决定是否要将row按照系统发生树cluster的结果重新排序,注意要和dendrogram一致。同理还有Colv =

dendrogram = "row", # 生成row的系统发生树

symbreaks = TRUE,

col=rev(colorRampPalette(brewer.pal(10, "RdBu"))(20)),

# color key在左上角,本图中为row-scale过,所以为row Z-score

# 设置color key的颜色,这里为20个色块构成,从蓝色到红色

breaks = seq(-0.5,0.5,0.05),

# 设置color key的范围,这里必须和上面col = 的20个色块对应起来。

# 从-0.5到0.5,以0.05为一个step,一共20个step, 对应20个色块。

density.info=c("none"),

# 设置color key中是否需要显示各个范围的count数目及其比例。none就不设置。

margins=c(8,16),

# 调整热图大小比例,在label的名字特别长的时候可以尝试调整,让Label显示完全

cexRow = 0.8, cexCol = 0.8, # 行/列名字体大小

keysize = 0.8 # 可以配合margins = 调节图例的大小及整个图的比例

colsep = c(15, 54)

#在热图中加入白色竖线,从而将其分成不同的部分。这个表示在第15个及第54个column的位置加上竖线。同理还有rowsep =

)

如果想把生成系统发生树聚类后的数据拿出来(即获得聚类后重新排列后的数据):

map

x_reorder

# x_reorder 为重新排序后的数据

heatmap.2的文件非常详细,见这个链接

添加多行ColSideColors

需要用到heatmap.plus包,其各种参数和heatmap.2差不多,但是heatmap.2只能为ColSideColors设置与column长度相当的character, heatmap.plus可以设置为matrix: 其实只用把两个(或者多个)含有颜色分配信息的vectorcbind到一起就可以了。

调整参数为ColSideColors = color # 注意使用heatmap.plus

另外有个升级版heatmap.3,参数基于heatmap.2,同样可以添加多行ColSideColors:

#通过devtools把heatmap.3的代码导入本地:

library(devtools)

source_url("https://raw.githubusercontent.com/obigriffith/biostar-tutorials/master/Heatmaps/heatmap.3.R")

heatmap.3(...)

### 2019.7.9 notes: 这个好像不是GMD包里的heatmap.3...???但是仍然可以用...???

# 以下是GMD包里的heatmap.3,注意和上面的不一样!!!

# 安装:

# (建议最好还是用上面那个heatmap.3,下面那篇帖子很全,GMD没有多少demo,color也不知道怎么设置=_=)

packageurl

install.packages(packageurl, repos=NULL, type="source")

library(GMD)

heatmap.3(...)

heatmap.3示例

library(devtools)

source_url("https://raw.githubusercontent.com/obigriffith/biostar-tutorials/master/Heatmaps/heatmap.3.R")

install.packages("mlbench") # 只是用里面的示例数据Glass

library(mlbench)

data(Glass)

# Glass如下所示

RI Na Mg Al Si K Ca Ba Fe Type

1 1.52101 13.64 4.49 1.10 71.78 0.06 8.75 0.00 0.00 1

2 1.51761 13.89 3.60 1.36 72.73 0.48 7.83 0.00 0.00 1

3 1.51618 13.53 3.55 1.54 72.99 0.39 7.78 0.00 0.00 1

4 1.51766 13.21 3.69 1.29 72.61 0.57 8.22 0.00 0.00 1

5 1.51742 13.27 3.62 1.24 73.08 0.55 8.07 0.00 0.00 1

Glass$fake_gp = c(rep('g1',107),rep('g2',107)) # 加一个fake_gp的分组

Glass$fake_gp = factor(Glass$fake_gp,levels = c('g1','g2'))

# 注意一定要转成factor

color_matrix = cbind(brewer.pal(7,"Set1")[Glass$Type],

c('black','grey50')[Glass$fake_gp])

colnames(color_matrix) = c('Type','fake_gp')

# 给color_matrix加上colname, 会当作colorbar名称在图中显示

df = Glass[1:9]

heatmap.3(df,

scale="col",

dendrogram = "row",

distfun = function(x){as.dist(1-cor(t(x)))}, # 不设置的话会用默认的

hclustfun = function(x){hclust(x, method = 'average')}, # 不设置的话会用默认的

Rowv = TRUE, Colv = FALSE,

symbreaks = FALSE,

col=rev(brewer.pal(10, "RdBu")),

RowSideColors = t(color_matrix), # 注意用t()转换,因为这里是rowside, colside则不用

breaks = seq(-1,1,0.2),

density.info=c("none"),

margins=c(10,10), # 设置热图横纵两个方向的留白

cexRow = 1, cexCol = 1,

# colsep = c(24,48,72),

# sepwidth = c(0.2,0.2), # 如果需要热图从中间分开,则设置这两个参数

keysize = 0.8,

key = TRUE,

symkey = FALSE

# KeyValueName = ... # 设置这个参数则替换“Column Z-Score”文本

)

这个post很有参考价值,包括了symkey调整color的用途,不同包默认的建树设置等。

ComplexHeatmap::Heatmap

ComplexHeatmap是一个bioconductor的包,需要这样安装:参考

BiocManager::install("ComplexHeatmap")

优点在于自动附上了图例;可以添加多个row或者column的annotation;在annotation是连续型变量是不用手动设置intervel。可以把heatmap.2中构建的树完整移植过来。

一个示例,使用瞎掰的数据集mat

library(ComplexHeatmap)

library(circlize)

library(dendextend)

library(RColorBrewer)

# 瞎掰数据集mat

set.seed(123)

mat = matrix(rnorm(100),10)

rownames(mat) = paste0("R",1:10)

colnames(mat) = paste0("c",1:10)

# 再掰一个meta data,用于做heatmap的annotation

meta_mat = data.frame(ind=1:10)

meta_mat$m1 = c(rep('a',5),rep('b',5))

meta_mat$m2 = c(rep('c',2),rep('d',3),rep('e',5))

meta_mat$m3 = rnorm(10)

数据集一览:

mat

meta_mat

# 给heatmap的行做annotation, 注意对应每个变量,指定颜色

row_ha = rowAnnotation(df=meta_mat[,c('m1','m2','m3')],

col=list(m1=c('a' = 'blue','b'='red'),

m2=c('c'='pink','d'='darkgreen','e'='grey50'),

m3=circlize::colorRamp2(c(-1,0,1), c("blue", "white", "red"))))

ComplexHeatmap::Heatmap(mat,name='mat',

column_title = 'test_mat',

right_annotation = row_ha,

col = rev(brewer.pal(10,"RdBu")), # 热图的颜色

column_dend_height = unit(3,"cm"), # 设置树的大小

# 这里设置了一个对聚类树的分割及上色,在h=2.5处分簇并着色:

cluster_columns = dendextend::color_branches(as.dendrogram(hclust(dist(mat))),

h = 2.5),

show_column_names = F # 不显示column name

)

如果用heatmap.3来做:

meta_mat$m1 = factor(meta_mat$m1,levels = c('a','b'))

meta_mat$m2 = factor(meta_mat$m2,levels = c('c','d','e'))

# 设置intervel

meta_mat$inter = findInterval(meta_mat$m3,

sort(meta_mat$m3,decreasing = F))

pal = colorRampPalette(c('white','red'))

color_matrix = data.frame(

m1=c('blue','red')[meta_mat$m1],

m2=c('pink','darkgreen','grey50')[meta_mat$m2],

m3=pal(nrow(meta_mat))[meta_mat$inter]

)

hh = heatmap.3(as.matrix(mat),

dendrogram = 'both',

distfun = function(x){as.dist(1-cor(t(x)))},

hclustfun = function(x){hclust(x,method = 'ward.D2')},

col = rev(brewer.pal(10,'RdBu')),

Rowv = TRUE, Colv = TRUE,

ColSideColors = as.matrix(color_matrix)

)

...不好看

把heatmap.3中的树移植到ComplexHeatmap::Heatmap中去:

ComplexHeatmap::Heatmap(mat,name='mat',

column_title = 'test_mat',

right_annotation = row_ha,

col = rev(brewer.pal(10,"RdBu")), # 热图的颜色

column_dend_height = unit(3,"cm"), # 设置树的大小

# 换成hh的术,并且设置一个对聚类树的分割及上色,在h=2.5处分簇并着色:

cluster_columns = dendextend::color_branches(hh$colDendrogram,

h = 2.5),

show_column_names = F # 不显示column name

)

html如何绘制热图,R使用笔记: heatmap.2绘制热图相关推荐

  1. R学习笔记 | 直方图、核密度图

    R学习笔记 | 直方图.核密度图.数字特征 一.直方图hist() 二.核密度图density() 三.随机变量的数字特征 一.直方图hist() breaks:分割点坐标 counts:频数 den ...

  2. R绘图笔记 | 火山图的绘制

    参考前文:R绘图笔记 | R语言绘图系统与常见绘图函数及参数 关于绘图,前面介绍了一些: R绘图笔记 | 一般的散点图绘制 R绘图笔记 | 柱状图绘制 R绘图笔记 | 直方图和核密度估计图的绘制 R绘 ...

  3. R绘图笔记 | 小提琴图与漂亮的云雨图绘制

    参考前文:R绘图笔记 | R语言绘图系统与常见绘图函数及参数 关于绘图图,前面介绍了一些: R绘图笔记 | 一般的散点图绘制 R绘图笔记 | 柱状图绘制 R绘图笔记 | 直方图和核密度估计图的绘制 R ...

  4. 相关性热图绘制教程(origin绘制,无须R语言)

    相关性热图绘制教程(origin绘制!无需R语言) 相关性热图在很多文章中都有出现,一般都是使用R语言进行绘制.在origin中也可以进行同样的绘制,详细过程如下: 实例解读 这个数据是来源于R中的一 ...

  5. 【R语言】——pheatmap包绘制聚类热图1(保姆级教程)

    一.前言 1 热图介绍 通常,热图是对所获得的数据或其他因素进行归一化处理后,用颜色的变化来直观表示不同样本间的变化情况.本质上其是由一个个用预设颜色表示数值大小的小方格组成的数据矩阵,并通过对因子或 ...

  6. R pdf大小_数据可视化 - 热图·R

    热图(如下图所示),是一种展示样本与差异变量关系的可视化方式,可以通过R/python进行绘制.本文主要分别具体介绍如何使用R实现热图绘制. R绘制热图 通常调用R的软件包"pheatmap ...

  7. 20180430-A · ACS Census Data (2015) · ggplot2 maps rcstatebin 地图 热图 蜂窝地图 动态图 · R 语言数据可视化 案例 源码

    所有作品合集传送门: Tidy Tuesday 2018 年合集传送门: 2018 ACS Census Data (2015) 欢迎来到`ggplot2`的世界! ggplot2是一个用来绘制统计图 ...

  8. 如何在R语言中建立六边形矩阵热图heatmap可视化

    原文链接:http://tecdat.cn/?p=18879 这是一个六边形热图可视化程序,主要用到的知识RColorBrewer,fields,也就是R中的可视化绘图库(点击文末"阅读原文 ...

  9. R绘图笔记 | 一般的散点图绘制

    可先阅读文章:R绘图笔记 | R语言绘图系统与常见绘图函数及参数 1.利用plot()绘制散点图 R语言中plot()函数的基本格式如下: plot(x,y,...) plot函数中,x和y分别表示所 ...

最新文章

  1. /etc/hosts/中HOSTNAME错误导致lsnrctl启动错误
  2. hololens离线安装包都收集齐了
  3. ubnutu18.10拔除硬盘后进行recovery mode
  4. mac node oracle,将Python3.5(Mac OS X El Capitan)连接到Oracle集群(远程)
  5. 斯特林发动机图纸尺寸_南昌教学模型订做,航空发动机模型_境海模型
  6. 亲身试验 pycharm 下载 并 安装 pygame包
  7. nsis 固定到任务栏
  8. 【转】sql语句优化工具LECCO SQL Expert
  9. 论文笔记_S2D.09-2018-ECCV_从RGB和稀疏感知估计深度
  10. 第一冲刺阶段(第四天)
  11. vmware workstation 12安装ubuntu kylin 16.04虚拟机
  12. 解决表格td宽度设置失效问题
  13. 最小的浏览器-橘子浏览器才1M大小
  14. wedo2.0恐龙系列图纸roboriseits乐高机器人暑假班(课程安排,psd海报,宣传素材,课堂实拍照片视频,课后反思等所有内容)
  15. 【代码实现】tag-based-multi-span-extraction
  16. BZOJ4771七彩树——可持久化线段树+set+树链的并+LCA
  17. c语言天数倒计时软件,c语言 日期倒计时 日期计算器
  18. django 框架模型之models常用的Field,这些Field的参数、及常见错误原因及处理方案。
  19. python 实现贷款计算
  20. 拼多多商家一件代发,一键打单有什么软件?

热门文章

  1. Android代码实现打开打开wifi wps按钮和wps pin码输入
  2. github_adi官方例程使用指南
  3. solr 高并发_精妙绝伦!阿里资深架构师撰写这份:并发编程,可谓“独具匠心”...
  4. JavaWeb实现短信验证
  5. linux下如何拷贝软链接
  6. 无向图的Depth-first search和Breadth-first Search
  7. 洛谷B2079 求出 e 的值(阶乘)
  8. java 风的角度转风向
  9. 如何与安道拓Adient建立 EDI连接
  10. C++学习之路——Chapter 2:开始学习C++