R'de bir fan (Polar) Dendrogramı nasıl çizilir?


9

Böyle bir şeye atıfta bulunuyorum:

alternatif metin

bir çözüm göstermek için önerilen veri kümesi:

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

1
Kutupsal temsilin avantajı nedir (yerden tasarruf etmenin yanı sıra)? Bana bakmak daha zor gibi görünüyor.
nico

1
@nico Daha havalı (-;

1
Bir
sapınız

3
@mbq: orada "iyi" bir pisi kaçırdınız ... "daha fazla hayran " diyebilirdiniz :)
nico

Yanıtlar:


10

Filogenetikte, bu bir fan filogramıdır, bu yüzden bunu dönüştürebilir phylove kullanabilirsiniz ape:

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

Sonuç:
alternatif metin


(+1) Bunu aradım, ancak apepakette bulamıyorum!
chl

Bingo. Aradığım şey buydu. Ggplot2'de benzer bir şey olup olmadığını merak ediyorum ...
Tal Galili

@Tal ggplot2'deki ağaç yapıları için resmi destek yok. Bu Google grubu konusuna bakın, konusuna j.mp/c85l5l (ama kesinlikle dairesel değil).
chl

Merhaba chl, bağlantı için teşekkürler. Orada da bu koda atıfta bulunarak cevap vereceğim ...
Tal Galili

5

Bu gönderiyi gördün mü? http://groups.google.com/group/ggplot2/browse_thread/thread/8e1efd0e7793c1bb

Örneği ele alalım, coord_polar () öğesini ekleyin ve eksenleri ters çevirin ve oldukça yaklaşın:

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)Bu hatayı alıyorum: ggplot2 doesn't know how to deal with data of class phylo. Neyi kaçırıyorum?
GaBorgulya

1

Dört yıl sonra, şimdi bu soruya cevap verebiliyorum. İki yeni paket birleştirilerek yapılabilir: circlize ve dendextend .

Çizim, circlize_dendrogramfonksiyon kullanılarak yapılabilir (plot.phylo işlevinin "fan" düzeni üzerinde çok daha rafine bir kontrol sağlar).

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

Ve sonuç:

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.