You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何优化R语言绘制的583样本层次聚类树状图美观度?

优化大样本层次聚类树状图的实用方案

嘿,针对你583个样本生成的层次聚类树状图杂乱的问题,我整理了几个实用的优化思路,结合你的现有代码给你拆解一下,帮你把树状图变得清爽又实用:

1. 精简标签显示

如果标签重复太多或者不需要逐个查看,最简单的方式就是调整标签的显示逻辑:

# 直接隐藏所有标签(适合只看聚类结构的场景)
plot(hc, hang = -1, labels = FALSE)

# 保留Class标签但缩小字体避免重叠
plot(hc, hang = -1, labels = ilpd_df$Class, cex = 0.5) # cex参数控制字体大小,数值越小越紧凑

2. 生成简化版聚类树

先通过cutree确定你需要的聚类数目,然后只保留顶层聚类结构,砍掉冗余的细枝末节:

library(ape)

# 先设定聚类数(比如分成4类,你可以根据自己的划分调整)
clusters <- cutree(hc, k = 4)
# 把hclust对象转换成phylo格式,再合并成简化树
hc_phylo <- as.phylo(hc)
hc_simplified <- collapse.singles(hc_phylo)
hc_simplified <- drop.tip(hc_simplified, setdiff(hc_simplified$tip.label, names(table(clusters))))
# 绘制简化后的树状图
plot(hc_simplified, show.node.label = TRUE, cex = 0.7)

3. 换成交互式树状图

plotly生成交互式图,支持缩放、hover查看单样本细节,完美解决大样本拥挤问题:

library(plotly)

# 把hclust对象转换成dendrogram格式
dend <- as.dendrogram(hc)
# 生成交互式可视化
plot_ly(dend) %>% layout(showlegend = FALSE)

4. 用dendextend做精细化美化

这个包可以给不同聚类分支上色、调整分支样式,让树状图直观又好看:

library(dendextend)

# 转换为dendrogram并做美化处理
dend <- as.dendrogram(hc) %>%
  color_branches(k = 4) %>% # 按聚类数给分支上色
  set("labels_col", value = ilpd_df$Class) %>% # 标签按Class列区分颜色
  set("labels_cex", 0.4) %>% # 缩小标签字体
  set("hang_leaves", -1) # 让叶节点对齐

# 绘制美化后的树状图
plot(dend, main = "优化后的层次聚类树状图")

5. 旋转分支优化布局

如果某些分支挤在一起,可以旋转节点调整排列:

# 旋转指定范围的分支(这里示例旋转前100个样本对应的分支,你可以按需调整)
dend <- rotate(dend, 1:100)
plot(dend, hang = -1)

整合你的代码的优化示例

把上面的方法和你的原始流程结合,这里给你一个完整的美化版本:

# 原始数据处理逻辑
idx_583 <- sample(1:nrow(ilpd_df), 583)
distance_matrix <- dist(as.matrix(ilpd_df[idx_583,-c(1,2,10,11)]), method = "euclidean")
hc <- hclust(distance_matrix, method = "average")

# 用dendextend做美化
library(dendextend)
dend <- as.dendrogram(hc) %>%
  color_branches(k = 4) %>%
  set("labels_cex", 0.4) %>%
  set("hang_leaves", -1)

plot(dend, main = "583样本层次聚类优化树状图")

你可以根据自己的需求组合这些方法,比如先简化树结构再加上色,或者直接用交互式图方便探索细节。

内容的提问来源于stack exchange,提问作者Raghav Sharma

火山引擎 最新活动