小言_互联网的博客

聚类热图怎么按自己的意愿调整分支的顺序?

521人阅读  评论(0)

生物信息学习的正确姿势

NGS系列文章包括NGS基础在线绘图、转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这)、ChIP-seq分析 (ChIP-seq基本分析流程)、单细胞测序分析 (重磅综述:三万字长文读懂单细胞RNA测序分析的最佳实践教程)、DNA甲基化分析、重测序分析、GEO数据挖掘(典型医学设计实验GEO数据分析 (step-by-step))、批次效应处理等内容。

聚类热图的层级关系是固定的,但分支的左右镜像是可变的。如何让聚类结果更好的呈现我们想要的顺序呢?看下面的操作。

数据示例


   
  1. exprTable <- read.table( "exprTable.txt", sep= "\t", row.names= 1, header=T, check.names = F)
  2. exprTable

测试时直接拷贝这个数据即可


   
  1. ## Zygote 2_cell 4_cell 8_cell Morula ICM
  2. ## Pou5f1 1.0 2.0 4.0 8.0 16.0 32.0
  3. ## Sox2 0.5 1.0 2.0 4.0 8.0 16.0
  4. ## Gata2 0.3 0.6 1.3 2.6 5.2 10.4
  5. ## cMyc 10.4 5.2 2.6 1.3 0.6 0.3
  6. ## Tet1 16.0 8.0 4.0 2.0 1.0 0.5
  7. ## Tet3 32.0 16.0 8.0 4.0 2.0 1.0

绘制一个聚类热图很简单


   
  1. library(pheatmap)
  2. pheatmap(exprTable)

如何自定义分支顺序呢

自己做个hclust传进去,顺序跟pheatmap默认是一样的


   
  1. exprTable_t <- as.data.frame(t(exprTable))
  2. col_dist = dist(exprTable_t)
  3. hclust_1 <- hclust(col_dist)
  4. pheatmap(exprTable, cluster_cols = hclust_1)

人为指定顺序排序样品

按发育时间排序样品


   
  1. manual_order = c( "Zygote", "2_cell", "4_cell", "8_cell", "Morula", "ICM")
  2. dend = reorder(as.dendrogram(hclust_1), wts=order(match(manual_order, rownames(exprTable_t))))
  3. # 默认为mean,无效时使用其他函数尝试
  4. # dend = reorder(as.dendrogram(hclust_1), wts=order(match(manual_order, rownames(exprTable_t))), agglo.FUN = max)
  5. col_cluster <- as.hclust(dend)
  6. pheatmap(exprTable, cluster_cols = col_cluster)

按某个基因的表达由小到大排序

可以按任意指标排序,基因表达是一个例子。


   
  1. dend = reorder(as.dendrogram(hclust_1), wts=exprTable_t$Tet3)
  2. col_cluster <- as.hclust(dend)
  3. pheatmap(exprTable, cluster_cols = col_cluster)

按某个基因的表达由大到小排序


   
  1. dend = reorder(as.dendrogram(hclust_1), wts=exprTable_t$Tet3*( -1))
  2. col_cluster <- as.hclust(dend)
  3. pheatmap(exprTable, cluster_cols = col_cluster)

按分支名字(样品名字)的字母顺序排序


   
  1. library(dendextend)
  2. col_cluster <- hclust_1 %>% as.dendrogram %>% sort %>% as.hclust
  3. pheatmap(exprTable, cluster_cols = col_cluster)

梯子形排序:最小的分支在右侧


   
  1. col_cluster <- hclust_1 %>% as.dendrogram %>% ladderize(TRUE) %>% as.hclust
  2. pheatmap(exprTable, cluster_cols = col_cluster)

梯子形排序:最小的分支在左侧


   
  1. col_cluster <- hclust_1 %>% as.dendrogram %>% ladderize(FALSE) %>% as.hclust
  2. pheatmap(exprTable, cluster_cols = col_cluster)

按特征值排序

样本量多时的自动较忧排序


   
  1. sv = svd(exprTable)$v[, 1]
  2. dend = reorder(as.dendrogram(hclust_1), wts=sv)
  3. col_cluster <- as.hclust(dend)
  4. pheatmap(exprTable, cluster_cols = col_cluster)

R语言学习 - 热图美化 (数值标准化和调整坐标轴顺序)

图形解读系列 | 给你5个示例,你能看懂常用热图使用吗?

ComplexHeatmap |理解绘图逻辑绘制热图

获取pheatmap聚类后和标准化后的结果

这也太简单了吧!一个函数完成数据相关性热图计算和展示

https://stackoverflow.com/questions/52446477/r-hclust-common-order-for-multiple-trees
https://www.biostars.org/p/237067/

往期精品(点击图片直达文字对应教程)

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集


转载:https://blog.csdn.net/qazplm12_3/article/details/108675705
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场