Làm thế nào để vẽ một Dendrogram quạt (Polar) trong R?


9

Tôi đang đề cập đến một cái gì đó như thế này:

văn bản thay thế

dữ liệu đề xuất để hiển thị một giải pháp:

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

1
Lợi thế của một đại diện cực (ngoài việc tiết kiệm không gian) là gì? Có vẻ như tôi là khó khăn hơn để xem xét.
nico

1
@nico Thật tuyệt vời (-;

1
Nó cũng hữu ích khi bạn không có một thân cây ...
Tal Galili

3
@mbq: bạn đã bỏ lỡ một cách chơi chữ "tốt" ở đó ... bạn có thể đã nói "đó là người hâm mộ nhiều hơn " :)
nico

Câu trả lời:


10

Trong phylogenetic, đây là một phylogram của người hâm mộ, vì vậy bạn có thể chuyển đổi nó thành phylovà sử dụng ape:

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

Kết quả:
văn bản thay thế


(+1) Tôi đã tìm cái này, nhưng không thể tìm thấy nó trong apegói!
chl

Chơi lô tô. Đó là những gì tôi đang tìm kiếm. Tôi tự hỏi nếu có một cái gì đó tương tự trong ggplot2 ...
Tal Galili

@Tal Không có hỗ trợ chính thức cho các cấu trúc cây trong ggplot2. Nhìn vào chủ đề nhóm Google này, j.mp/c85l5l (nhưng chắc chắn nó không phải là thông tư).
chl

Xin chào chl, cảm ơn bạn đã liên kết. Tôi cũng sẽ trả lời ở đó với tham chiếu đến mã này ...
Tal Galili

5

Bạn đã thấy bài này? http://groups.google.com/group/ggplot2/browse_thread/thread/8e1efd0e7793c1bb

Lấy ví dụ, thêm tọa độ_polar () và đảo ngược các trục và bạn sẽ khá gầ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)Tôi nhận được lỗi này : ggplot2 doesn't know how to deal with data of class phylo. Tôi đang thiếu gì?
GaBorgulya

1

Bốn năm sau, bây giờ tôi có thể trả lời câu hỏi này. Nó có thể được thực hiện bằng cách kết hợp hai gói mới: tuần hoàndendextend .

Cốt truyện có thể được thực hiện bằng cách sử dụng circlize_dendrogramchức năng (cho phép kiểm soát tinh tế hơn nhiều đối với bố cục "quạt" của chức năng cốt truyện).

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

Và kết quả là:

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.