如何基于标签前缀为R语言树状图(Dendogram)的标签和分支上色?
基于标签前缀为R树状图的标签和分支上色
完整实现代码
先整理示例数据并完成上色逻辑:
# 加载所需包 library(dendextend) # 准备示例数据(修正重复列名) Correlation_Test <- data.frame( "A Data 1" = c(0.1666667, 0.6666667, 0.5), "A Data 2" = c(0.5, 0.6666667, 0.5), "B Data 1" = c(0.6666667, 0.6666667, 0.6666667) ) # 计算距离与聚类(变量聚类需转置数据,样本聚类可跳过转置) d <- dist(t(Correlation_Test)) hc <- hclust(d, "ave") dend <- as.dendrogram(hc) # 转为dendextend可处理的树状图对象 # 根据标签前缀生成颜色向量 labels <- labels(dend) label_colors <- ifelse(grepl("^A", labels), "red", "blue") # A前缀标红,B前缀标蓝 # 为标签上色 dend <- dend %>% set("labels_colors", label_colors) # 为分支上色(匹配对应标签的颜色) cluster_groups <- ifelse(grepl("^A", labels), 1, 2) dend <- dend %>% set("branches_k_color", k = 2, col = c("red", "blue"), groupLabels = cluster_groups) # 绘制树状图 plot(dend, main = "按标签前缀上色的树状图")
关键步骤说明
- 数据转置:示例数据是行样本、列变量,若要对变量聚类需转置数据;如果你的原始数据已经以变量为行,可跳过这一步。
- 标签颜色匹配:用
grepl("^A", labels)匹配以"A"开头的标签,通过ifelse生成对应颜色向量,再用set("labels_colors")完成赋值。 - 分支上色:通过标签前缀预先定义分组,再用
set("branches_k_color")根据分组为分支上色,确保分支颜色与对应标签一致。
扩展说明
如果有更多前缀类别(如C、D),只需扩展颜色匹配逻辑即可,示例如下:
library(dplyr) label_colors <- case_when( grepl("^A", labels) ~ "red", grepl("^B", labels) ~ "blue", grepl("^C", labels) ~ "green", TRUE ~ "black" )
内容的提问来源于stack exchange,提问作者Gregor O
相关产品推荐
相关产品推荐

