R 使用';Dendex趋势&x27;

R 使用';Dendex趋势&x27;,r,dendrogram,dendextend,pvclust,R,Dendrogram,Dendextend,Pvclust,我目前正在构建一个树状图,我正在使用“Dendex趋势”来调整它的外观。 除了在预定义的簇周围绘制矩形外,我可以做任何我想做的事情(标记叶子和突出显示所选簇的分支) 我的数据(可以从这个文件中获得:)是用“pvclust”聚集的,所以“pvrect”在正确的位置绘制矩形,但它会剪切标签(见下图),所以我想用“rect.dendrogram”重现它,但是,我不知道如何告诉函数使用“pvclust”中的聚集数据 这是我正在使用的代码: idnames <- dimnames(ibs_mat)

我目前正在构建一个树状图,我正在使用“Dendex趋势”来调整它的外观。 除了在预定义的簇周围绘制矩形外,我可以做任何我想做的事情(标记叶子和突出显示所选簇的分支)

我的数据(可以从这个文件中获得:)是用“pvclust”聚集的,所以“pvrect”在正确的位置绘制矩形,但它会剪切标签(见下图),所以我想用“rect.dendrogram”重现它,但是,我不知道如何告诉函数使用“pvclust”中的聚集数据

这是我正在使用的代码:

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)
idnames%#节点点类型
设置(“leaves_cex”,1)%>%#节点点大小
设置(“叶子颜色”,ibs表格$Cluster颜色)%>%\35;节点点颜色
分支属性按标签(ibs\U meta$Sample,TF\U values=c(2,Inf),属性=c(“lwd”))%>%更改分支宽度
#矩形树状图(k=12,聚类=ibs\u表$cluster\u int,border=8,lty=5,lwd=1.5,
#下矩形=0)%>%#在簇周围添加矩形
绘图(main=“Barramundi样本基于IBS的聚类”)
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)
devtools::install_github('talgalili/dendextend'))
图书馆(pvclust)
图书馆(Dendestend)
数据(肺)#73名受试者的916个基因
种子集(13134)
结果%
pvclust_show_signif(结果,signif值=c(“黑色”、“灰色”),show_type=“col”)%>%
绘图(main=“带AU/BP值(%)的聚类树状图”)
#pvrect(结果,α=0.95)
pvrect2(结果,α=0.95)
文本(结果,alpha=0.95)

UvdV.png

请提供我们可以运行您的代码的最小可复制数据,例如粘贴
dput(ibs_mat)
的输出或subset@R.S.问题中添加了一个由
dput(ibs\u mat)
创建的示例文件。
idnames
函数来自何处,请清除工作区并重新运行代码,以确保上述代码中包含所有内容,包括所有需要安装的库。@R.S.这些名称只是矩阵名称(尽管在示例中它们是从外部函数派生的)。我已经更新了上面的代码,使用了矩阵的
dimnames
。太好了,非常感谢您提供了一个稳定的解决方案,而不仅仅是一次性解决方案!!非常感谢。我的荣幸:)我认为应该推广使用rect.dendrogram,但我会在另一个时间进行…@TalGalili是否可以保持pvclust分支上方注释的AU/BP值?您好@R.S。您只需添加
文本(结果,alpha=0.95)
。我已经相应地更新了答案。您好@TalGalili,我刚回到您的解决方案(这次是针对另一个数据集),但当我试图控制AU/BP文本标签属性(大小、颜色、旋转)时,只有
print.num=FALSE
对输出有影响。我的命令是:
text(result,print.num=FALSE,srt=90,cex.pv=0.6,col.pv=c(2,0,0))