Bagaimana cara menggambar Dendrogram fan (Polar) di R?

9

Saya mengacu pada sesuatu seperti ini:

teks alternatif

dataset yang disarankan untuk menunjukkan solusi:

data(mtcars)
plot(hclust(dist(mtcars)))
Tal Galili
sumber
1
Apa keuntungan dari representasi kutub (selain menghemat ruang)? Bagiku itu tampak sulit untuk dilihat.
nico
1
@nico Ini lebih keren (-;
1
Ini juga berguna ketika Anda tidak memiliki satu batang ...
Tal Galili
3
@ MBB: Anda melewatkan pun "baik" pun di sana ... Anda bisa mengatakan "itu lebih banyak penggemar " :)
nico

Jawaban:

10

Dalam filogenetik, ini adalah filum kipas, sehingga Anda dapat mengonversikannya ke phylodan menggunakan ape:

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

Hasil:
teks alternatif


sumber
(+1) Saya mencari yang ini, tetapi tidak dapat menemukannya dalam apepaket!
chl
Bingo. Itu yang saya cari. Saya ingin tahu apakah ada sesuatu yang serupa di ggplot2 ...
Tal Galili
@Tal Tidak ada dukungan resmi untuk struktur pohon di ggplot2. Lihat utas grup Google ini, j.mp/c85l5l (tapi ini pasti tidak melingkar).
chl
Halo chl, terima kasih atas tautannya. Saya akan menjawab di sana dengan mengacu pada kode ini juga ...
Tal Galili
5

Apakah Anda melihat posting ini? http://groups.google.com/group/ggplot2/browse_thread/thread/8e1efd0e7793c1bb

Ambil contoh, tambahkan coord_polar () dan balikkan sumbu dan Anda menjadi cukup dekat:

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
sumber
1
p <- ggplot(data=x)Saya mendapatkan error ini: ggplot2 doesn't know how to deal with data of class phylo. Apa yang saya lewatkan?
GaBorgulya
1

Empat tahun kemudian, saya sekarang dapat menjawab pertanyaan ini. Ini dapat dilakukan dengan menggabungkan dua paket baru: circlize dan dendextend .

Plot dapat dibuat menggunakan circlize_dendrogramfungsi (memungkinkan untuk kontrol yang jauh lebih halus atas tata letak "kipas" dari fungsi 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) 

Dan hasilnya adalah:

masukkan deskripsi gambar di sini

Tal Galili
sumber