Wie zeichne ich ein Fan (Polar) Dendrogramm in R?


9

Ich beziehe mich auf so etwas:

Alt-Text

Vorgeschlagener Datensatz zum Anzeigen einer Lösung:

data(mtcars)
plot(hclust(dist(mtcars)))

1
Was ist der Vorteil einer polaren Darstellung (abgesehen von Platzersparnis)? Es sieht für mich schwieriger aus, es anzusehen.
— Nico

1
@nico Es ist cooler (-;

1
Es ist auch nützlich, wenn Sie keinen Stamm haben ...
— Tal Galili

3
@mbq: du hast dort ein "gutes" Wortspiel verpasst ... du hättest sagen können "es ist mehr Fan " :)
— nico

Antworten:


10

In der Phylogenetik ist dies ein Fan-Phylogramm, sodass Sie dieses konvertieren phylound verwenden können ape:

library(ape)
library(cluster) 
data(mtcars)
plot(as.phylo(hclust(dist(mtcars))),type="fan")

Ergebnis:
Alt-Text


(+1) Ich habe nach diesem gesucht, kann ihn aber nicht im apePaket finden!
— Chl

Bingo. Das habe ich gesucht. Ich frage mich, ob es etwas Ähnliches in ggplot2 gibt ...
— Tal Galili

@Tal Keine offizielle Unterstützung für Baumstrukturen in ggplot2. Schauen Sie sich diesen Google-Gruppenthread an, j.mp/c85l5l (aber er ist definitiv nicht kreisförmig).
— Chl

Hallo chl, danke für den Link. Ich werde dort auch mit Bezug auf diesen Code antworten ...
— Tal Galili

5

Hast du diesen Beitrag gesehen? http://groups.google.com/group/ggplot2/browse_thread/thread/8e1efd0e7793c1bb

Nehmen Sie das Beispiel, fügen Sie coord_polar () hinzu und kehren Sie die Achsen um, und Sie kommen ziemlich nahe:

library(cluster) 
data(mtcars)
x <- as.phylo(hclust(dist(mtcars)))

p <- ggplot(data=x)
p <- p + geom_segment(aes(y=x,x=y,yend=xend,xend=yend), colour="blue",alpha=1) 
p <- p + geom_text(data=label.phylo(x), aes(x=y, y=x, label=label),family=3, size=3) + xlim(0, xlim) + coord_polar()

theme <- theme_update(  axis.text.x = theme_blank(),
                        axis.ticks = theme_blank(),
                        axis.title.x = theme_blank(),
                        axis.title.y = theme_blank(),
                        legend.position = "none"
                     )
p <- p + theme_set(theme)
print(p)

1
p <- ggplot(data=x)Ich erhalte diesen Fehler : ggplot2 doesn't know how to deal with data of class phylo. Was vermisse ich?
— GaBorgulya

1

Vier Jahre später kann ich diese Frage nun beantworten. Dies kann durch Kombinieren von zwei neuen Paketen erfolgen: circlize und dendextend .

Der Plot kann mit der circlize_dendrogramFunktion erstellt werden (was eine wesentlich genauere Steuerung des "Fan" -Layouts der Funktion plot.phylo ermöglicht).

# install.packages("dendextend")
# install.packages("circlize")
library(dendextend)
library(circlize)

# create a dendrogram
hc <- hclust(dist(datasets::mtcars))
dend <- as.dendrogram(hc)

# modify the dendrogram to have some colors in the branches and labels
dend <- dend %>% 
   color_branches(k=4) %>% 
   color_labels

# plot the radial plot
par(mar = rep(0,4))
# circlize_dendrogram(dend, dend_track_height = 0.8) 
circlize_dendrogram(dend, labels_track_height = NA, dend_track_height = .4) 

Und das Ergebnis ist:

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.