r - 使用 'dendextend' 在树状图中围绕指定标签绘制矩形

标签 r dendrogram dendextend pvclust

我目前正在构建树状图,并使用“dendextend”来调整它的外观。 我已经能够做我想做的一切(标记叶子并突出显示我选择的簇的分支),除了在预定义簇周围绘制矩形之外。

我的数据(可以从此文件中获取: Barra_IBS_example.matrix )与“pvclust”聚集在一起,因此“pvrect”在正确的位置绘制矩形,但它会剪切标签(参见下图),所以我想用“rect.dendrogram”重现它,但是,我不知道如何告诉该函数使用“pvclust”中的聚类数据。

dendrogram with pvrect

这是我正在使用的代码:

idnames <- dimnames(ibs_mat)[[1]]
ibs.pv <- pvclust(ibs_mat, nboot=1000)
ibs.clust <- pvpick(ibs.pv, alpha=0.95)
names(ibs.clust$clusters) <- paste0("Cluster", 1:length(ibs.clust$clusters))
# Choose a colour palette
pal <- brewer.pal(length(ibs.clust$clusters), "Paired")
# Transform the list to a dataframe
ibs_meta <- bind_rows(lapply(names(ibs.clust$clusters), 
       function(l) data.frame(Cluster=l, Sample = ibs.clust$clusters[[l]])))
# Add the rest of the non-clustered samples (and assign them as Cluster0), add colour to each cluster
ibs_table <- ibs_meta %>% 
  rbind(., data.frame(Cluster = "Cluster0", 
                       Sample = idnames[!idnames %in% .$Sample])) %>%
  mutate(Cluster_int=as.numeric(sub("Cluster", "", Cluster))) %>% 
  mutate(Cluster_col=ifelse(Cluster_int==0, "#000000", 
              pal[Cluster_int])) %>% 
  .[match(ibs.pv$hclust$labels[ibs.pv$hclust$order], .$Sample),]
hcd <- as.dendrogram(ibs.pv) %>%  
  #pvclust_show_signif(ibs.pv, show_type = "lwd", signif_value = c(2, 1),alpha=0.25) %>% 
  set("leaves_pch", ifelse(ibs_table$Cluster_int>0,19,18)) %>%  # node point type
  set("leaves_cex", 1) %>%  # node point size
  set("leaves_col", ibs_table$Cluster_col) %>% #node point color
  branches_attr_by_labels(ibs_meta$Sample, TF_values = c(2, Inf), attr = c("lwd")) %>% # change branch width
  # rect.dendrogram(k=12, cluster = ibs_table$Cluster_int, border = 8, lty = 5, lwd = 1.5,
  #                 lower_rect = 0) %>%  # add rectangles around clusters
  plot(main="Barramundi samples IBS based clustering")
pvrect(ibs.pv, alpha=0.95, lwd=1.5)

非常感谢,伊多

最佳答案

好吧,这比我希望的要多,但我为你找到了解决方案。

我创建了一个名为 pvrect2 的新函数,并将其推送到 github 上最新版本的 dendextend。这是一个演示解决方案的独立示例:

devtools::install_github('talgalili/dendextend')

library(pvclust)
library(dendextend)
data(lung) # 916 genes for 73 subjects
set.seed(13134)
result <- pvclust(lung[, 1:20], method.dist="cor", method.hclust="average", nboot=10)

par(mar = c(9,2.5,2,0))
dend <- as.dendrogram(result)
dend %>%    
   pvclust_show_signif(result, signif_value = c(3,.5)) %>%
   pvclust_show_signif(result, signif_value = c("black", "grey"), show_type = "col") %>% 
   plot(main = "Cluster dendrogram with AU/BP values (%)")
# pvrect(result, alpha=0.95)
pvrect2(result, alpha=0.95)
text(result, alpha=0.95)

[1]: /image/G UVDV.png

关于r - 使用 'dendextend' 在树状图中围绕指定标签绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44232962/

相关文章:

python - 将 SciPy 层次树状图切割成多个阈值的簇

r - 如何更改树状图的节点标签

r - 树状图边缘(分支)颜色匹配尖端(叶)颜色(猿包)

r - 如何在绘图上以相同的顺序关联聚类标签和树状图

arrays - 数组平均值矩阵

r - 如何在R中获取日期间隔的每个季度?

r - global.R 不启动

javascript - 如何隐藏树状图 d3 中的根元素

r - Strsplit后,输出不是预期的格式

r - 具有层次聚类的堆积条形图(树状图)