如何在运行agnes聚类前为样本名(树结构叶节点)上色以观测批次效应
agnes聚类树按批次给叶节点着色方案
可以实现,样本叶节点的着色属于可视化环节的操作,和聚类计算步骤没有先后绑定关系,你完全可以提前按照批次分组给样本指定颜色,不需要依赖聚类输出的分群结果。
完整操作步骤
1. 原有聚类逻辑保留,额外准备批次分组信息
library(cluster) # 你的原有聚类代码 df_clust <- na.omit(df) df_clust <- scale(df_clust) df_clust <- t(df_clust) agn_clust <- agnes(df_clust, method = "ward") # 存储聚类结果对象 # 准备批次分组向量,*必须和df_clust的行顺序完全对应* # 示例:前5个样本为批次1,后5个为批次2,请替换为你的真实批次元数据 batch_group <- factor(c(rep("批次1",5), rep("批次2",5))) names(batch_group) <- rownames(df_clust) # 绑定样本名避免顺序错位
2. 可视化着色方案
方案1:ggtree实现(更灵活,推荐用于对比可视化)
library(ggtree) library(ggplot2) # 转换聚类结果为树结构 tree <- as.hclust(agn_clust) # 绘制聚类树,按批次给叶节点和样本名上色 ggtree(tree) + geom_tippoint(aes(color = batch_group[label]), size=2) + # 叶节点圆点着色 geom_tiplab(aes(color = batch_group[label]), offset=0.2) + # 样本名着色 scale_color_manual(values = c("批次1" = "#E41A1C", "批次2" = "#377EB8"), name="批次分组") + theme(legend.position = "bottom")
方案2:基础R+ape包实现
library(ape) tree <- as.phylo(as.hclust(agn_clust)) # 生成叶节点颜色向量 tip_colors <- ifelse(batch_group == "批次1", "#E41A1C", "#377EB8") # 绘图 plot(tree, tip.color = tip_colors, cex = 0.8) legend("topright", legend = levels(batch_group), fill = c("#E41A1C", "#377EB8"), title = "批次分组")
批次校正前后对比说明
分别对校正前、校正后的表达矩阵执行上述聚类和可视化操作,保持批次的颜色映射规则完全一致,即可直观观察批次效应的校正效果:校正前同一批次样本会明显聚集,校正后不同批次的样本会按生物特征而非批次分组聚集。
内容的提问来源于stack exchange,提问作者zw_nz
相关产品推荐
相关产品推荐

