Je suis en train de construire un dendrogramme et j'utilise 'dendextend' pour modifier son apparence. J'ai pu faire tout ce que je voulais (marquer les feuilles et mettre en évidence les branches de mes clusters choisis), sauf dessiner des rectangles autour de clusters prédéfinis. Mes données (provenant de ce fichier: Barra_IBS_example.matrix) ont été regroupées avec 'pvclust', donc 'pvrect' dessine les rects dans la bonne position, mais il coupe les étiquettes (voir l'image ci-dessous), donc je veux pour le reproduire avec 'rect.dendrogram', cependant, je ne peux pas comprendre comment dire à la fonction d'utiliser les données de clustering de 'pvclust'.Dessin de rectangles autour d'étiquettes spécifiées dans un dendrogramme avec 'dendextend'
Ce code J'utilise:
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)
Un grand merci, Ido
S'il vous plaît fournir des données reproductibles minimum que nous pouvons exécuter votre code sur, par exemple coller la sortie de 'dput (ibs_mat)' ou un sous-ensemble – Djork
@ R.S. Un exemple de fichier créé par 'dput (ibs_mat)' a été ajouté dans la question. – IsoBar
D'où vient la fonction 'idnames', veuillez effacer votre espace de travail et relancer votre code pour vous assurer que tout est inclus dans le code ci-dessus, inclure toutes les bibliothèques qui doivent être installées. – Djork