2017-09-15 5 views
1

Ich versuche, ein zirkuläres Dendrogramm von Zusammensetzungsdaten zu plotten. Mit dem folgenden Code:Etikettierung zirkulär dasendendend dendrogram

library(dendextend) 
library(circlize) 
library(compositions) 
data("Hydrochem") 
hydro<-Hydrochem 

d <- dist(hydro[7:19], method="euclidean") 
hc <- hclust(d, method = "average") 
dend <- as.dendrogram(hc) 
hydro$River <- as.character(hydro$River) 
labels(dend) <- hydro$River[order.dendrogram(dend)] 
plot(dend) 

Ich kann einen normalen Dendrogramm von dem, was ich will mit den richtigen Etikettenaufträgen.

Aber wenn ich circlize_dendrogram(dend) laufen, bekomme ich diese:

enter image description here

Was ich ist ärgerlich das Dendrogramm in der Mitte ist - wenn ich die Reihenfolge der dendrogram nicht für die Etiketten verwenden (dh nur Eingabe labels(dend) <- hydro$River), das innere Dendrogramm ist in Ordnung und alles sieht gut aus.

Ich habe versucht, die labels_track_height und dend_track_height Einstellungen vergeblich zu ändern, und wenn ich den gleichen Prozess auf kleineren Spielzeug-Datasets ausführen, tritt dieses Problem nicht auf.

Irgendwelche Ideen?

Antwort

1

Sie haben also tatsächlich zwei Probleme in Ihrem Code: 1. Die Etiketten sind nicht eindeutig. 2. Das Diagramm bietet nicht genug Platz für die Beschriftungen, nachdem Sie sie im Dendrogrammobjekt aktualisiert haben

Das erste Problem kann gelöst werden, indem Nummern zu den nicht eindeutigen Beschriftungen hinzugefügt werden, die Sie liefern, wodurch sie eindeutig sind . Die Lösung für das zweite Problem besteht darin, mit dem Argument labels_track_height in der circlize_dendrogram-Funktion zu spielen. Hier ist der aktualisierte Code (die letzte Zeile bemerken, wo der Unterschied ist):

library(dendextend) 
library(circlize) 
library(compositions) 
data("Hydrochem") 
hydro<-Hydrochem 

d <- dist(hydro[7:19], method="euclidean") 
hc <- hclust(d, method = "average") 
dend <- as.dendrogram(hc) 

tmp <- as.character(hydro$River)[order.dendrogram(dend)] 
labels(dend) <- paste0(seq_along(tmp), "_", tmp) 
plot(dend) 
circlize_dendrogram(dend, labels_track_height = 0.4) 

Die Ausgabe, die Sie erhalten, ist dies:

enter image description here

(Dies wird nun automatisch in dendextend 1.6 getan. 0, derzeit auf github - und später auch auf CRAN verfügbar)

+1

Dank Tal - das ist eine viel gründlichere Erklärung und gut zu wissen, dass es automatisch gemacht wird. – Scott

+0

Mein Vergnügen. Wenn Sie es für eine wissenschaftliche Arbeit verwenden, ziehen Sie bitte die Papiere in Bezug auf denendendend UND circlize. Sie können sie finden mit: Zitat ("dendextend"); Zitat ("circlize") # (Danke) –

-1

Also, die Lösung für dieses Problem (wenn jemand mehr Details zur Verfügung stellen kann bitte, weil ich nicht wirklich verstehe, warum das überhaupt wichtig ist) ist ein zweiter dend <- as.dendrogram(hc) Aufruf nach der Definition der Etiketten hinzuzufügen. Also, der Code sieht so aus:

d <- dist(hydro[7:19], method="euclidean") 
hc <- hclust(d, method = "average") 
dend <- as.dendrogram(hc) 
hydro$River <- as.character(hydro$River) 
labels(dend) <- hydro$River[order.dendrogram(dend)] 
dend <- as.dendrogram(hc) 
circlize_dendrogram(dend) 

HINWEIS von einem anderen Benutzer: Dies löst die Frage nicht.

+0

Ich fürchte, diese Antwort ist nicht "korrekt". Sie haben lediglich das Ändern der Bezeichnungen des Dendrogramms ignoriert, indem Sie die Funktion circlize_dendrogram dazu gebracht haben, nur das Dendrogramm mit den alten Bezeichnungen zu zeichnen. –

Verwandte Themen