2011-08-26 11 views
4

J'ai utilisé le code suivant pour couper le dendrogramme à une hauteur particulière. Le problème que j'ai est que quand je coupe un dendrogramme, je ne peux pas comprendre comment ajouter des étiquettes aux nœuds. Comment puis-je couper un dendrogramme avec des étiquettes en utilisant le programme R?Comment étiqueter les nœuds terminaux d'un dendrogramme coupé?

library(Heatplus) 
cc=as.dendrogram(hclust(as.dist(mat),method="single")) 
cutplot.dendrogram(cc,h=20) 
+0

Qu'est-ce qu'un dendrogramme, et quelle langue est-ce? –

+0

@john c'est le langage R. Je suis en train de faire le clustering hiératique en utilisant R. – akash

+0

Ok, et qu'est-ce qu'un dendogramme? Au moins, dites quel domaine de la connaissance le définit. Statistiques? La physique? –

Répondre

6

Après une bonne quantité de creuser dans la documentation d'aide pour ?dendrogram, je suis tombé sur la fonction dendrapply qui contient un exemple pour faire quelque chose de très similaire. Voici votre solution, basée sur une modification de l'exemple ?dendrapply:

Créer dendrogramme et coupé à la hauteur h=20:

dhc <- as.dendrogram(hc <- hclust(dist(USArrests), "ave")) 
chc <- cut(dhc, h=20)$upper 

Définir un vecteur avec les newLabels, et une fonction newLab qui modifie un nœud individuel étiquette. Passez ensuite à ce dendrapply:

newLabels <- paste("Custom", 1:22, sep="_") 

local({ 
     newLab <<- function(n) { 
     if(is.leaf(n)) { 
      a <- attributes(n) 
      i <<- i+1 
      attr(n, "label") <- newLabels[i] 
     } 
     n 
     } 
     i <- 0 
    }) 

nhc <- dendrapply(chc, newLab) 
labels(nhc) 
[1] "Custom_1" "Custom_2" "Custom_3" "Custom_4" "Custom_5" "Custom_6" 
[7] "Custom_7" "Custom_8" "Custom_9" "Custom_10" "Custom_11" "Custom_12" 
[13] "Custom_13" "Custom_14" "Custom_15" "Custom_16" "Custom_17" "Custom_18" 
[19] "Custom_19" "Custom_20" "Custom_21" "Custom_22" 

plot(nhc) 

enter image description here

0

est ici une solution modifiée pour ce qui a écrit Andrie, mais en utilisant un nouveau package appelé "dendextend", construit exactement pour ce genre de chose.

Vous pouvez voir de nombreux exemples dans les présentations et les vignettes de l'emballage, dans la section « d'utilisation » dans l'URL suivante: https://github.com/talgalili/dendextend

Voici la solution pour cette question:

# define dendrogram object to play with: 
dhc <- as.dendrogram(hc <- hclust(dist(USArrests), "ave")) 
chc <- cut(dhc, h=20)$upper 
# loading the package 
require(dendextend)# let's add some color: 
# change labels with a simple assignment: 
labels(chc) <- paste("Custom", 1:22, sep="_") 
plot(chc) 

Pour l'installation du package (puisque je n'ai pas encore le télécharger à CRAN), utilisez:

#################### 
## installing dendextend for the first time: 

if (!require('installr')) install.packages('installr'); require('installr') 
## install.Rtools() # run this if you are using Windows and don't have Rtools 
require2(devtools) 
install_github('dendextend', 'talgalili') 
require2(Rcpp) 
install_github('dendextendRcpp', 'talgalili') 

Best, Tal

-1
cc$labels 

Ceci est un vecteur de tous les éléments du dendogramme.

cc$labels <- myVector 

Vous pouvez ajouter dans votre propre vecteur pour changer les étiquettes

Questions connexes