You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R的pvclust树状图中将叶标签改为水平显示?

解决pvclust聚类树状图叶标签水平显示的问题

我之前做Bootstrap层次聚类的时候也碰到过这个需求,plot.hclust确实没直接设置叶标签方向的参数,但有几个简单的办法能搞定,同时还能保留你需要的自定义标题和节点p值:

方法1:用dendextend包(推荐,更灵活)

这个包专门用来处理树状图的各种自定义需求,操作起来很直观:

  1. 先加载需要的包:
library(pvclust)
library(dendextend)
  1. 运行你的pvclust聚类(这里用示例数据,你替换成自己的数据集就行):
# 示例数据,替换为你的真实数据
data <- mtcars[, 1:5]
result <- pvclust(data, method.hclust = "ward.D2", method.dist = "euclidean")
  1. 把hclust对象转成dendrogram,设置叶标签为水平(0度),还可以调整标签大小:
dend <- as.dendrogram(result$hclust)
# 设置叶标签水平(0度,默认是90度垂直),同时调整字体大小
dend <- dend %>% 
  set("labels_angle", 0) %>% 
  set("labels_cex", 0.8)
  1. 绘制树状图,添加自定义标题,然后叠加pvclust的节点p值:
plot(dend, main = "我的Bootstrap层次聚类结果", horiz = FALSE)
# 添加节点的au和bp p值,digits控制小数位数
text.pvclust(result, digits = 2, cex = 0.7)

方法2:不用额外包,手动调整叶标签

如果不想装新包,也可以用基础绘图函数手动添加水平标签:

  1. 先绘制hclust树状图,但不显示默认的叶标签:
plot(result$hclust, main = "我的Bootstrap层次聚类结果", labels = FALSE)
  1. 手动添加水平叶标签,调整位置避免和树重叠:
# 获取叶节点的x坐标和对应标签
leaf_x <- result$hclust$order
leaf_labels <- rownames(data)[leaf_x]
# 添加水平标签,srt=0表示水平,y值根据你的树高调整(这里用-0.5,可按需修改)
text(x = leaf_x, y = rep(-0.5, length(leaf_x)), 
     labels = leaf_labels, srt = 0, cex = 0.8, adj = c(0.5, 1))
  1. 同样叠加节点p值:
text.pvclust(result, digits = 2, cex = 0.7)

两种方法都能实现你要的效果,dendextend的方式更适合后续做更多树状图的自定义(比如颜色分支、高亮分组等),基础方法则更轻量化。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:38:19