今天小编向大家介绍一下使用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包哦~