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

如何在R中横向绘制保留信息的pvclust聚类树状图?

解决pvclust横向树状图保留所有信息的方法

pvclust自带的绘图函数不支持直接通过horiz=T生成横向树状图,且转换为普通dendrogram会丢失au、bp等专属标注。以下两种方法可实现需求:

方法1:基础绘图系统旋转实现

先绘制纵向树状图(保留所有标注),再通过旋转坐标系转为横向,同时调整文字位置避免重叠:

# 假设你的pvclust结果对象为pv
plot(pv, ylim=c(0, 0.004))  # 先绘制带所有标注的纵向图
# 旋转绘图坐标系
par(usr = c(par("usr")[3:4], par("usr")[1:2]))
# 重新绘制树状图,隐藏原坐标轴和边框
plot(pv, ylim=c(0, 0.004), axes=FALSE, frame.plot=FALSE)
axis(1)  # 添加对应原height的x轴
# 调整au/bp标签的显示角度
text_idx <- which(names(pv$edges) == "label")
for (i in text_idx) {
  text(pv$edges$x[i], pv$edges$y[i], pv$edges$label[i], srt=90, adj=c(0, 0.5))
}

方法2:ggdendro+ggplot2实现(更灵活稳定)

通过提取pvclust的完整数据,用ggplot2绘制可自定义的横向树状图,完美保留所有信息:

# 安装并加载依赖包
install.packages(c("ggdendro", "ggplot2"))
library(ggdendro)
library(ggplot2)

# 提取树状图结构数据
dend_data <- dendro_data(pv, type="rectangle")
# 提取pvclust专属的au/bp标注信息
label_data <- pv$edges[pv$edges$label != "", c("x", "y", "label")]
# 转换坐标适配横向布局
label_data$x_new <- label_data$y
label_data$y_new <- label_data$x

# 绘制横向树状图
ggplot() +
  geom_segment(data=segment(dend_data), 
               aes(x=y, y=x, xend=yend, yend=xend)) +
  geom_text(data=label(dend_data), 
            aes(x=y, y=x, label=label), hjust=1, size=3) +
  geom_text(data=label_data, 
            aes(x=x_new, y=y_new, label=label), hjust=0, size=2.5) +
  coord_flip() +
  scale_y_continuous(name="Height") +
  theme_minimal() +
  theme(axis.text.y=element_blank(), axis.ticks.y=element_blank())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:15:41