绘制有间隙的热图绘制-gapmap

2022-03-28 15:34:44 浏览数 (2)

今天小编向大家介绍一下使用gapmap和dendsort包生成带间隙的热图绘制方法及效果。

gapmap包通过调整每个叶子的位置来编码两个节点之间的相似性, 两个相邻节点相似性的信息都体现树状图的分支高度中,基于相似性对叶片进行定位。

gapmap在树状图和热图的可视化中都引入了间隙,以指数方式将两个节点的距离(不相似)映射到间隙大小的比例。

代码语言:javascript复制
install.packages("gapmap")  #安装包
library(gapmap)
library(RColorBrewer)  #R语言配色包
RdBu = rev(brewer.pal(11, name="RdBu"))
RdYlBu = rev(brewer.pal(11, name="RdYlBu"))

data("sample_tcga")  #加载数据矩阵
代码语言:javascript复制
dataTable <- t(sample_tcga)  #矩阵转置
row_dist <- as.dist(1-cor(t(dataTable), method = "pearson"))
col_dist <- as.dist(1-cor(dataTable, method = "pearson"))
 #计算相关性,并且将矩阵转化为聚类分析用的距离
col_hc <- hclust(col_dist, method = "complete")  
row_hc <- hclust(row_dist, method = "complete")  
#层次聚类
col_d <- as.dendrogram(col_hc)
row_d <- as.dendrogram(row_hc)
#生成系统树图 

一、gapmap

1.绘制没有间隙的聚类图

代码语言:javascript复制
gapmap(m = as.matrix(dataTable),
       d_row = rev(row_d), d_col = col_d,  
       #rev将向量或矩阵进行翻转
       #d_row是行的系统树数据,d_col是列的系统树数据
       ratio =0 , verbose=FALSE, col=RdBu,
       #ratio是图形中空白间隙所占宽度百分比。
       #verbose是否详细显示进行的步骤
       label_size=2,
       v_ratio= c(0.8,0.8,0.8), h_ratio=c(0.1,0.8,0.1)
       #设置图形中垂直各组分所占图形的比例,它参数分别为顶部竖线,中心聚类图,底部标签。
       #设置图形中水平各组分所占图形的比例,它参数分别为左侧横线,中心聚类图,右侧标签。
       )

2.有间隙的聚类图

代码语言:javascript复制
gapmap(m = as.matrix(dataTable),
       d_row = rev(row_d), d_col = col_d,
       mode = "quantitative",
       #mode是间隙模式,"阈值" 或 "定量"("threshold" 或 "quantitative")形式
       mapping="exponential",
       #在quantitative间隙模式的情况下,调控间隙的形式,“线性”或“指数” ("linear" or "exponential" )
       col=RdBu,
       ratio = 0.3, verbose=FALSE,
       scale = 0.5, label_size=2,
       #scale 指mapping="exponential"(指数间隙模式)下,间隙映射的比例
       #label_size 标签文字大小
       v_ratio= c(0.1,0.8,0.1), h_ratio=c(0.1,0.8,0.1)
)

3.更改颜色绘制热图

代码语言:javascript复制
gapmap(m = as.matrix(dataTable),
       d_row = rev(row_d), d_col = col_d,
       mode = "quantitative",
       mapping="exponential",
       col=RdYlBu,  #更换颜色
       ratio = 0.3, verbose=FALSE,
       scale = 0.5, label_size=2,
       v_ratio= c(0.1,0.8,0.1), h_ratio=c(0.1,0.8,0.1)
       )

二、 dendsort

dendsort包与gapmap结合,可以重新排列树状图的结构。

dendsort对树状图对象进行排序,通常用于层次聚类后。根据每个合并点处子树的平均距离,对生成的树状图中的子树进行排序。较紧密的群(平均距离较小的群集)位于分支的左侧。当叶子与簇合并时,叶子将放置在右侧。

代码语言:javascript复制
install.packages("dendsort")
library(dendsort)

1.绘制排序后的热图

代码语言:javascript复制
gapmap(m = as.matrix(dataTable),
       d_row = rev(dendsort(row_d, type = "average")),
       d_col = dendsort(col_d, type = "average"),  
       #dendsort对树状图对象进行排序
       mode = "quantitative", mapping="exponential",
       ratio = 0.3, verbose=FALSE, scale = 0.5, v_ratio= c(0.1,0.8,0.1),
       h_ratio=c(0.1,0.8,0.1), label_size=2, show_legend=TRUE, col=RdBu)

2.绘制空白树状图(gapped dendrogram)。

gap_dendrogram 是ggplot2绘制空白树状图的方法,输入数据类型为gapdata class,由gap_data()生成

代码语言:javascript复制
row_data <- gap_data(d= dendsort(row_d, type = "average"),
                     mode = "quantitative", mapping="exponential",
                     ratio=0.3, scale= 0.5)   #生成数据
dend <- gap_dendrogram(data = row_data,
                     leaf_labels = TRUE,  #是否加标签
                     rotate_label = TRUE) #是否旋转标签
dend   theme(axis.ticks.length= grid::unit(0,"lines") ) 
  theme(axis.ticks.margin = grid::unit(-0.8, "lines"))
#将axis.tick.margin设置为负值,使文本标签更接近树状图

小编总结:

R语言中绘制聚类热图的方法有很多,比如pheatmap、heatmap还有我们今天介绍的gapmap等,小伙伴们可以比较优势,选择适合自己作图的R包哦~

0 人点赞