Como plotar um Dendrograma (Polar) de fã em R?

9

Estou me referindo a algo assim:

texto alternativo

conjunto de dados sugerido para mostrar uma solução:

data(mtcars)
plot(hclust(dist(mtcars)))
Tal Galili
fonte
11
Qual é a vantagem de uma representação polar (além de economizar espaço)? Parece-me que é mais difícil de olhar.
Nico
11
@nico É mais legal (-;
11
Ele também é útil quando você não tem uma haste ...
Tal Galili
3
@mbq: você perdeu uma "boa" trocadilho lá ... você poderia ter dito "que é mais " :)
nico

Respostas:

10

Na filogenética, este é um filograma de fãs, para que você possa convertê-lo phyloe usar ape:

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

Resultado:
texto alternativo


fonte
(+1) Procurei este, mas não consigo encontrá-lo no apepacote!
chl
Bingo. Era isso que eu estava procurando. Gostaria de saber se existe algo semelhante em ggplot2 ...
Tal Galili
@Tal Não há suporte oficial para estruturas de árvores no ggplot2. Veja este tópico do grupo do Google, j.mp/c85l5l (mas definitivamente não é circular).
quer tocar
Olá chl, obrigado pelo link. Vou responder lá com referência a este código, bem ...
Tal Galili
5

Você viu esta postagem? http://groups.google.com/group/ggplot2/browse_thread/thread/8e1efd0e7793c1bb

Pegue o exemplo, adicione coord_polar () e inverta os eixos e você fica bem perto:

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)
Charlotte Wickham
fonte
11
p <- ggplot(data=x)Eu recebo este erro: ggplot2 doesn't know how to deal with data of class phylo. o que estou perdendo?
precisa saber é o seguinte
1

Quatro anos depois, agora sou capaz de responder a essa pergunta. Isso pode ser feito combinando dois novos pacotes: circule e dendextend .

A plotagem pode ser feita usando a circlize_dendrogramfunção (permitindo um controle muito mais refinado sobre o layout "ventilador" da função 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 o resultado é:

insira a descrição da imagem aqui

Tal Galili
fonte