如何将pvclust聚类树状图的样本名替换为对应FAB分组标签
pvclust聚类树替换样本标签为对应FAB分组
现有操作代码
读取并清洗表达矩阵
mat <- read.table("Model_pvclust/Model18_FAB_M5_vs_M0_MAP_TF.txt",sep = "\t",strip.white = FALSE,check.names = FALSE,header=TRUE,row.names=1) drop <- c("gene","baseMean","log2FoldChange","lfcSE","stat","pvalue","padj","UP_DOWN") d1 <- select(mat, -one_of(drop))
读取样本元数据
metadata <-read.table("Model_hmap_meta/FAB_table.txt",sep = "\t",strip.white = FALSE,check.names = FALSE,header=TRUE,row.names=1) head(metadata)
元数据前6行结构:
| 样本ID | prior_malignancy | FAB | Risk_Cyto |
|---|---|---|---|
| TCGA-AB-2856 | no | M4 | Intermediate |
| TCGA-AB-2849 | no | M0 | Poor |
| TCGA-AB-2971 | no | M4 | Intermediate |
| TCGA-AB-2930 | no | M2 | Intermediate |
| TCGA-AB-2891 | no | M1 | Poor |
| TCGA-AB-2872 | no | M3 | Good |
原始聚类绘图代码
pvc <- pvclust( data = d1 , method.dist = "correlation", method.hclust = "complete",parallel = T) plot(pvc,las=2,hang = -0.5) pvrect(pvc, alpha = 0.9)
需求
当前输出的聚类树默认标注原始样本名称,需要匹配聚类后样本的排列顺序,将标签替换为元数据中对应样本的FAB列分组信息。
- 当前生成的pvclust聚类图:

- 期望效果参考图:

解决方案
pvclust返回对象的hclust子对象中,labels元素按聚类树从左到右的叶子顺序存储了原始样本名,只需按该顺序匹配元数据中的FAB值,绘图时传入labels参数即可完成替换。
完整代码如下:
# 若未加载dplyr需先运行library(dplyr) # 提取聚类树叶子节点的样本顺序 leaf_sample_order <- pvc$hclust$labels # 按顺序匹配对应FAB分组作为新标签 fab_labels <- metadata[leaf_sample_order, "FAB"] # 绘制替换标签后的聚类图 plot(pvc, las=2, hang=-0.5, labels = fab_labels) pvrect(pvc, alpha = 0.9)
如果需要同时展示样本ID和FAB分组,可将标签拼接后再传入:
fab_labels <- paste0(leaf_sample_order, " (", metadata[leaf_sample_order, "FAB"], ")")
注意:运行前需确认表达矩阵的列名(样本ID)和元数据的行名完全匹配,无缺失、拼写不一致的情况,否则会出现标签匹配为NA的问题。
内容的提问来源于stack exchange,提问作者PesKchan
相关产品推荐
相关产品推荐

