在R中使用pvclust:聚类树AU/BP标签被遮挡的解决方法求助
我来帮你解决这个AU/BP标签被遮挡的问题,刚好之前做聚类验证时也碰到过一模一样的情况,给你几个亲测可行的方案:
方案1:直接调整pvclust自带绘图参数(最省心)
不用额外依赖其他包,直接利用pvclust::plot.pvclust的内置参数就能解决遮挡问题:
- 缩小样本标签:用
cex参数降低标签字号,避免标签太宽挤占AU/BP的空间,比如cex=0.6(数值可以根据你的树的大小调整) - 偏移AU/BP标签位置:用
offset.pv参数把AU/BP值往右挪,给标签留出空间,比如offset.pv=0.05 - 直接隐藏样本标签:如果你的分析不需要显示样本标签,直接加
labels=FALSE参数,彻底解决遮挡问题
给你个完整的示例代码:
library(pvclust) # 模拟测试数据 data <- matrix(rnorm(100), nrow=10) # 运行pvclust聚类 fit <- pvclust(data, method.hclust="ward.D2", method.dist="euclidean") # 方案1a:缩小标签+调整AU/BP位置 plot(fit, cex=0.5, offset.pv=0.08, cex.pv=0.8) # 方案1b:直接隐藏样本标签 plot(fit, labels=FALSE, cex.pv=0.9)
方案2:结合dendextend定制(解决你之前的适配问题)
如果你一定要用dendextend来精细化调整树的样式,核心是先把pvclust的聚类树转换成dendextend兼容的对象,再单独处理标签和AU/BP值,步骤如下:
library(dendextend) library(pvclust) # 模拟数据和聚类(和上面一致) data <- matrix(rnorm(100), nrow=10) fit <- pvclust(data, method.hclust="ward.D2", method.dist="euclidean") # 把pvclust的聚类树转成dend对象 dend <- as.dendrogram(fit$hclust) # 移除样本标签(或者用set("labels_cex", 0)把标签缩到看不见) dend <- dend %>% remove_labels() # 先画处理好的树 plot(dend) # 手动添加AU/BP值,用pvclust输出的验证数据 pv_values <- fit$edges[,c("au", "bp")] # 遍历每个节点添加文本(y坐标可以根据树的高度微调) for(i in 1:nrow(pv_values)){ node <- fit$edges[i,"node"] x_pos <- get_nodes_attr(dend, "x", node) y_pos <- get_nodes_attr(dend, "y", node) text(x_pos, y_pos + 0.1, labels = paste0("AU:", round(pv_values[i,"au"], 1), "\nBP:", round(pv_values[i,"bp"], 1)), cex=0.7) } # 要是需要标注显著聚类,直接用pvclust自带的pvrect pvrect(fit, alpha=0.95)
方案3:调整绘图区域边距
有时候遮挡是因为绘图区域的右边距不够,AU/BP值被挤出去了,可以用par函数临时调整边距:
# 调整右边距为8(默认是2),给AU/BP留出空间 par(mar=c(5, 4, 4, 8)) plot(fit) # 记得用完后恢复默认边距 par(mar=c(5, 4, 4, 2))
内容的提问来源于stack exchange,提问作者Hannah H.
相关产品推荐
相关产品推荐

