Come tracciare un Dendrogram (polare) di un fan in R?


9

Mi riferisco a qualcosa del genere:

testo alternativo

set di dati suggerito per mostrare una soluzione:

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

1
Qual è il vantaggio di una rappresentazione polare (oltre a risparmiare spazio)? Mi sembra più difficile da guardare.
nico,

1
@nico È più bello (-;

1
È utile anche quando non hai una radice ...
Tal Galili,

3
@mbq: hai perso un "buon" gioco di parole lì ... avresti potuto dire "è più fan " :)
nico

Risposte:


10

In filogenetica, questo è un fillogramma di fan, quindi puoi convertirlo in phyloe usare ape:

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

Risultato:
testo alternativo


(+1) Ho cercato questo, ma non riesco a trovarlo nel apepacchetto!
chl

Bingo. Questo è quello che stavo cercando. Mi chiedo se c'è qualcosa di simile in ggplot2 ...
Tal Galili,

@Tal Nessun supporto ufficiale per le strutture ad albero in ggplot2. Guarda questo thread del gruppo Google, j.mp/c85l5l (ma non è definitivamente circolare).
chl

Ciao chl, grazie per il link. Vi risponderò anche con riferimento a questo codice ...
Tal Galili,

5

Hai visto questo post? http://groups.google.com/group/ggplot2/browse_thread/thread/8e1efd0e7793c1bb

Prendi l'esempio, aggiungi coord_polar () e inverti gli assi e ti avvicini abbastanza:

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)Ottengo questo errore: ggplot2 doesn't know how to deal with data of class phylo. Cosa mi sto perdendo?
GaBorgulya,

1

Quattro anni dopo, ora sono in grado di rispondere a questa domanda. Può essere fatto combinando due nuovi pacchetti: circlize e dendextend .

La trama può essere fatta usando la circlize_dendrogramfunzione (consentendo un controllo molto più raffinato sul layout "fan" della funzione plot.phylo).

# 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) 

E il risultato è:

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.