Як побудувати вентиляторну (полярну) дендрограму в R?


9

Я маю на увазі щось подібне:

alt текст

запропонований набір даних для показу рішень:

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

1
Яка перевага полярного подання (окрім економії місця)? Мені здається, що на це складніше дивитися.
nico

1
@nico Це крутіше (-;

1
Це також корисно, коли у вас немає одного стебла ...
Тал Галілі

3
@mbq: ти пропустив там "хороший" каламбур ... ти міг сказати "це більше фанат " :)
nico

Відповіді:


10

У філогенетиці це вентиляторна філограма, тому ви можете конвертувати її phyloта використовувати ape:

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

Результат:
alt текст


(+1) Я шукав цей, але не знайшов його в apeупаковці!
chl

Бінго. Ось що я шукав. Цікаво, чи є щось подібне в ggplot2 ...
Тал Галілі

@Tal Немає офіційної підтримки деревних структур в ggplot2. Подивіться на цю групову нитку Google, j.mp/c85l5l (але вона, безумовно, не кругла).
chl

Привіт чл, дякую за посилання. Я відповім там із посиланням на цей код ...
Тал Галілі

5

Ви бачили цю публікацію? http://groups.google.com/group/ggplot2/browse_thread/thread/8e1efd0e7793c1bb

Візьмемо приклад, додай координата () і поверніть осі, і ви отримаєте досить близько:

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)Я отримую цю помилку: ggplot2 doesn't know how to deal with data of class phylo. Що я пропускаю?
ГаБоргуля

1

Через чотири роки я зараз можу відповісти на це питання. Це можна зробити, комбінуючи два нові пакети: кружляти та розв’язувати .

Сюжет можна зробити за допомогою circlize_dendrogramфункції (що дозволяє значно вдосконалити контроль над "вентиляторною" компонуванням функції 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) 

І результат такий:

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.