2

Ich habe einen hierarchischen Cluster für ein Projekt. Ich habe 300 Beobachtungen von 20 Variablen. Ich indizierte alle Variablen, so dass jede Variable zwischen 0 und 1 liegt, ein größerer Wert ist besser.Wie Knoten Beschriftungen von Dendrogramm Plot zu ändern

Ich habe den folgenden Code verwendet, um ein Cluster-Diagramm zu erstellen.

Jetzt sind die Beschriftungen der Knoten in Zeilennamen, die Nummern 1 bis 300 (siehe Bild oben). Während der Analyse habe ich die erste Spalte des Datenrahmens entfernt, die mit "Geographie" gekennzeichnet ist (siehe unteres Bild), weil es sich um Stadtnamen im Text handelt, die die Analyse zunichte machen würden. Aber ich wirklich müssen die Stadtnamen auf dem Cluster-Plot an ihren richtigen Stellen zu bekommen, weil ich eine Liste der Städte basierend auf den Ergebnissen wählen muss.

Welchen Code soll ich schreiben, um die Stadtnamen in die "geography" -Spalte einzufügen, die ihren Zeilennamen entsprechen?

Wie Sie aus dem Datenrahmen (unteres Bild) sehen können, sind alle Städtenamen in alphabetischer Reihenfolge, sauber in aufsteigender Reihenfolge, genau wie die Zeilennamen. Ich bin mir sicher, dass es nicht schwer ist, die Stadtnamen auf die Handlung zu setzen, ich kann es einfach nicht finden, indem ich googele und herum frage.

enter image description here How to alter the label of the nodes? Right now it's numbers but I need them to be cities.

enter image description here

+0

Bitte verwendet reproduzierbaren Code zur Verfügung zu stellen, bereit zu-Paste-run zu kopieren, ist es einfacher für die Besucher und Leser zu machen. (ZB 'all_data' wird nicht angegeben; Screenshots von Datensätzen sind nicht hilfreich; das Ergebnis von' dput (my_data) 'ist der richtige Weg.) – lukeA

+0

danke für den Rat, ich werde das in Zukunft üben – Elan

+0

[Warum Verbessere deine Frage jetzt nicht] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)? – Jaap

Antwort

2

wollen Sie die Original-Etiketten statt IDs? Vielleicht hilft Ihnen bei der Analyse:

data <- USArrests[1:5, ] 
data <- cbind(label=row.names(data), data) 
row.names(data) <- NULL 
d <- dist(data[, -1]) 
hc <- hclust(d) 
plot(hc) 
rect.hclust(hc, h=40) 

![enter image description here

data$label[order.dendrogram(as.dendrogram(hc))] 
# [1] "Arkansas" "Arizona" "California" "Alabama" "Alaska" 

clusters <- cutree(hc, h=40) 
split(data$label, clusters) 
# $`1` 
# [1] "Alabama" "Alaska" 
# 
# $`2` 
# [1] "Arizona" "California" 
# 
# $`3` 
# [1] "Arkansas" 

hc$labels <- data$label 
plot(hc) 

enter image description here

PS: Ich fand es hilfreich Dendrogramme zu PDF zu speichern, in dem Sie die Ansicht vergrößern und aus leicht: pdf("my.pdf"); plot(hc); dev.off() .

+0

versuchte diese Lösung und Fehler zurückgegeben ... endete mit einem Skizzenbuch, um die Zeichenwerte nach den Zeilennummern lol manuell eingeben, aber ich werde mehr herumstochern, wenn ich Zeit habe – Elan

+0

_ "versuchte diese Lösung und Fehler zurückgegeben .. "_ - was genau hast du versucht, welche Fehlermeldung kam zurück? Sie sollten Ihren Beitrag bearbeiten und die Daten sowie den vollständigen Code hinzufügen, um Ihr Problem zu reproduzieren. Sonst ist es nicht möglich zu helfen. – lukeA

2

Ich denke, dass was Sie fragen ist, "wie kann ich über die Etiketten in einem Dendrogramm entscheiden". Das hat also zwei Teile. Nehmen wir zum Beispiel die einfachen Daten der Zahlen c (1,2,5,6)

1) Wenn Sie die hclust mit dist erstellen, verwendet es die Namen der Elemente. Und wenn sie nicht existieren, dann benutzt sie einen laufenden Index. Zum Beispiel:

x <- c(1,2,5,6) 
d1 <- as.dendrogram(hclust(dist(x))) 
plot(d1) 

enter image description here

Das ist natürlich ein Problem, da die Artikel, die wir haben, sind 1,2,5,6 und nicht 1: 4! Wie können wir das beheben? Eine Möglichkeit ist, die Namen zu aktualisieren. Zum Beispiel:

x <- c(1,2,5,6) 
names(x) <- x 
x 
d2 <- as.dendrogram(hclust(dist(x))) 
plot(d2) 

enter image description here

Ich glaube, dies löst im Allgemeinen Ihr Problem (und ehrlich gesagt, ist es nicht erforderlich dendextend).Aber wenn Sie den Text nach dem Erstellen des Dendrogramms aktualisieren möchten - lesen Sie weiter:

2) Das Dendextend-Paket ermöglicht es Ihnen, die Etiketten eines Dendrogramms zu aktualisieren. Aber Sie müssen sicherstellen, dass Sie die richtige Reihenfolge verwenden (da die Reihenfolge des ursprünglichen Vektors und die der Beschriftungen im Baum nicht identisch sind!). Hier ist, wie es getan werden kann:

if (!require(dendextend)) install.packages(dendextend); 
library(dendextend) 
x <- c(1,2,5,6) 
d3 <- as.dendrogram(hclust(dist(x))) 
labels(d3) <- x[order.dendrogram(d3)] 
plot(d3) 

enter image description here

Hier ist, wie wir es für eine komplexere Datenobjekt tun würde (wo wir möglicherweise nicht mit den Zeilennamen des Objekts spielen wollen, aber zu aktualisieren, um die Dendrogramm): get

if (!require(dendextend)) install.packages(dendextend); 
library(dendextend) 
x <- CO2[,4:5] 
d4 <- as.dendrogram(hclust(dist(x))) 
labels(d4) <- apply(CO2[,1:3], 1, paste, collapse = "_")[order.dendrogram(d4)] 

d4 <- set(d4, "labels_cex", 0.6) 
d4 <- color_branches(d4, k = 3) 
par(mar = c(3,0,0,6)) 
plot(d4, horiz = T) 

enter image description here

Verwandte Themen