如何用hclust和cutreeDynamic绘制带聚类颜色的树状图并定位Control2Case样本
解决带聚类颜色和特殊样本标记的树状图绘制问题
以下是基于你已有的hclust树状图、cutreeDynamic聚类结果,以及Control2Case样本标记的适配方案,用R的dendextend包实现(该包对树状图的定制化支持更友好):
步骤1:确认已有对象(替换为你的实际变量)
假设你已经生成了以下核心对象:
# 你的层次聚类结果 hc <- hclust(dist(your_dataset), method = "ward.D2") # 动态聚类的分组标签(每个样本对应一个聚类编号) cluster_labels <- cutreeDynamic(hc, distM = as.matrix(dist(your_dataset)), method = "hybrid") # 标记Control2Case样本的逻辑向量(TRUE=目标样本,FALSE=其他) is_c2c <- your_dataset$Control2Case
步骤2:加载依赖包
library(dendextend) library(dynamicTreeCut)
步骤3:定制并绘制树状图
# 将hclust对象转为dendrogram格式,方便后续定制 dend <- as.dendrogram(hc) # 给树状图的分支按聚类分组上色 dend <- color_branches(dend, groupLabels = cluster_labels) # 给Control2Case样本的标签设置特殊样式:红色字体+末尾星号 labels_colors(dend) <- ifelse(is_c2c, "red", "black") dend <- set(dend, "labels", value = ifelse(is_c2c, paste0(labels(dend), "*"), labels(dend))) # 调整绘图边距,预留右侧图例空间 par(mar = c(5, 4, 4, 8)) # 绘制最终树状图 plot(dend, main = "聚类树状图(Control2Case样本标记为红色*)", cex = 0.8, # 调整标签字体大小 horiz = FALSE) # 若想横向展示,改为TRUE # 在右侧添加聚类分组图例 legend("topright", inset = c(-0.2, 0), legend = unique(cluster_labels), fill = unique(get_branches_colors(dend)), title = "聚类分组", bty = "n") # 去掉图例边框
步骤4:提取Control2Case样本的聚类归属
直接输出目标样本对应的聚类信息,方便快速查看:
c2c_cluster_details <- data.frame( 样本名称 = labels(dend)[is_c2c], 所属聚类 = cluster_labels[is_c2c] ) print("Control2Case样本聚类归属:") print(c2c_cluster_details)
关键说明
color_branches会根据cluster_labels自动给同一聚类的分支分配相同颜色,也可以用color_leaves给样本节点上色,按需选择。- 若你的Control2Case样本是分组变量(而非逻辑向量),只需把
ifelse的判断条件改为对应取值即可,比如is_c2c == "Control2Case"。 - 调整
cex参数可以适配样本数量多少,避免标签重叠。
内容的提问来源于stack exchange,提问作者José Adrián Pardo Pérez
相关产品推荐
相关产品推荐

