如何在R语言的树状图(Dendrogram)中为聚类添加框式标签?
树状图聚类区域添加独立框式标签解决方案
问题背景
需要为树状图的每个聚类区域添加带框的独立标签,但当前代码将聚类名称附在物种(Specie)标签后,不符合需求。
数据示例
Specie;Cluster;A;B 1;4;0.003594057;0.003594057 2;4;0.004548265;0.004548265 3;4;0.004551177;0.004551177 4;4;0.004889955;0.004889955 5;4;0.004645822;0.004645822 6;3;0.158136546;0.005911143 7;4;0.004827345;0.004827345 8;3;0.181887896;0.006387762 9;3;0.155627259;0.005777185 10;4;0.005248148;0.005248148 11;4;0.004480801;0.004480801 12;4;0.004781236;0.004781236 13;1;1;0.001377924 14;3;0.164309781;0.007946238 15;2;0.437294513;0.003118894 16;3;0.181133169;0.010087141 17;4;0.028744201;0.028744201 18;4;0.004867629;0.004867629 19;4;0.006461536;0.006461536 20;3;0.172580237;0.010015308 21;3;0.189448277;0.008443727 22;4;0.004569135;0.004569135 23;4;0.009534806;0.009534806 24;3;0.183054691;0.0126338 25;3;0.199946514;0.01640938 26;4;0.01003181;0.01003181 27;4;0.009964831;0.009964831 28;3;0.177578426;0.011115123 29;3;0.203733742;0.017803806 30;4;0.009477534;0.009477534 31;3;0.186869099;0.013588009 32;3;0.194106718;0.015397414 33;4;0.009655174;0.009655174 34;3;0.195003655;0.015621648 35;4;0.012924528;0.012924528 36;4;0.009473652;0.009473652 37;4;0.01203293;0.01203293 38;5;0.048146768;0.048146768 39;4;0.009969199;0.009969199 40;2;0.470963129;0.009127108 41;4;0.009641584;0.009641584 42;4;0.008821819;0.008821819 43;3;0.211170842;0.013712745 44;4;0.00940376;0.00940376 45;3;0.20177873;0.017315053 46;4;0.0041726;0.0041726 47;4;0.004170173;0.004170173 48;4;0.009588681;0.009588681 49;4;0.005260282;0.005260282 50;3;0.179906191;0.005831545 51;4;0.009565384;0.009565384 52;4;0.019591855;0.019591855 53;4;0.010158973;0.010158973 54;4;0.011264613;0.011264613 55;3;0.192672008;0.015038251 56;5;0.081005326;0.081005326 57;5;0.058880887;0.058880887 58;4;0.006573653;0.006573653 59;4;0.005261738;0.005261738 60;4;0.004243947;0.004243947 61;4;0.009413953;0.009413953 62;4;0;0 63;4;0.00824279;0.00824279 64;4;0.013707406;0.013707406 65;4;0.02907036;0.02907036
原始代码
setwd("C:/Users/david/OneDrive/Documents/R_Carpeta/2022_mid/2022_end") iris<-read.csv(file="Dendrograma_Ds_2022_Nor-Grupos.csv", header=TRUE, sep=";") Dg <- iris[,-1:-2] row.names(Dg) <- iris[,1] rest.dist <-dist(Dg,method="minkowski") hc1_5 <- hclust(rest.dist, method = "average") dend1_5 <- as.dendrogram(hc1_5) #Color iris_species <- rev(levels(iris[,2])) dend1_5_c <- color_branches(dend1_5,k=5, groupLabels=iris_species) is.character(labels(dend1_5_c)) # labels are no longer "integer" labels_colors(dend1_5_c) <- rainbow_hcl(3)[sort_levels_values( as.numeric(iris[,2])[order.dendrogram(dend1_5_c)] )] #Group labels labels(dend1_5_c) <- paste(as.character(iris[,2])[order.dendrogram(dend1_5_c)], "(",labels(dend1_5_c),")", sep = "") dend1_5_c_L <- hang.dendrogram(dend1_5_c,hang_height=0.1) dend1_5_c_L <- assign_values_to_leaves_nodePar(dend1_5_c_L, 0.5, "lab.cex") par(mar = c(3,3,3,7)) plot(dend1_5_c_L, horiz = FALSE, nodePar = list(cex = .007))
修改后的代码
setwd("C:/Users/david/OneDrive/Documents/R_Carpeta/2022_mid/2022_end") # 读取数据 iris <- read.csv(file="Dendrograma_Ds_2022_Nor-Grupos.csv", header=TRUE, sep=";") Dg <- iris[,-1:-2] row.names(Dg) <- iris[,1] # 构建聚类 rest.dist <- dist(Dg, method="minkowski") hc1_5 <- hclust(rest.dist, method = "average") dend1_5 <- as.dendrogram(hc1_5) # 颜色设置与分支着色 cluster_labels <- unique(iris$Cluster) dend1_5_c <- color_branches(dend1_5, k=5, groupLabels = cluster_labels) # 调整叶子标签格式(保留原物种名,不附加聚类信息) labels_colors(dend1_5_c) <- rainbow_hcl(length(cluster_labels))[ sort_levels_values(as.numeric(iris$Cluster)[order.dendrogram(dend1_5_c)]) ] # 悬挂树状图 dend1_5_c_L <- hang.dendrogram(dend1_5_c, hang_height=0.1) dend1_5_c_L <- assign_values_to_leaves_nodePar(dend1_5_c_L, 0.5, "lab.cex") # 绘图并添加聚类框与标签 par(mar = c(5, 4, 4, 8)) plot(dend1_5_c_L, horiz = FALSE, nodePar = list(cex = .007), main = "聚类树状图") # 为每个聚类添加带框标签 rect.dendrogram( dend1_5_c_L, k=5, border=rainbow_hcl(5), lty=2, lwd=2, rect=TRUE, text=cluster_labels, cex=1, col=rainbow_hcl(5), bg="white" )
关键改动说明
- 移除聚类名附加逻辑:删掉了将聚类名称拼接至物种标签的代码,保留原始物种标识。
- 核心函数
rect.dendrogram:这是实现带框聚类标签的关键,通过指定聚类数量k=5,自动识别聚类区域,绘制边框并添加对应标签,同时可自定义边框样式、标签颜色。 - 调整绘图边距:修改
par(mar)参数,为聚类标签预留足够显示空间。 - 统一颜色映射:将分支颜色、边框颜色、标签颜色保持一致,提升可视化的一致性和可读性。
内容的提问来源于stack exchange,提问作者Another.Chemist
相关产品推荐
相关产品推荐

