2017-01-31 3 views
0

Я пытаюсь построить в dendrogram с большим количеством узлов с использованием ggdendrogram, и это довольно медленно (по сравнению с dendextend, например):ggdendrogram для большого числа узлов

set.seed(1) 
mat <- matrix(rnorm(100*10),nrow=100,ncol=10) 
dend <- as.dendrogram(hclust(dist(mat))) 


require(ggdendro) 
require(dendextend) 
require(microbenchmark) 
> microbenchmark(ggdendrogram(dend,rotate=T,labels=F,size=4,theme_dendro=F)) 
Unit: milliseconds 
                    expr  min  lq  mean median  uq  max neval 
ggdendrogram(dend, rotate = T, labels = F, size = 4, theme_dendro = F) 394.3181 409.3591 431.0981 412.515 416.4568 1346.844 100 

> microbenchmark(dend %>% plot(horiz = TRUE)) 
Unit: milliseconds 
         expr  min  lq  mean median  uq  max neval 
dend %>% plot(horiz = TRUE) 138.7253 207.92 214.5278 208.8807 211.2602 640.0316 100 

Есть ли способ ускорить его, чтобы сделать его сопоставимым с скоростью участка dendextend?

Кроме того, могу ли я указать rotate=T или

ggdendrogram(dend,rotate=F,labels=F,size=4,theme_dendro=F)+coord_flip() 

Я получаю дендрограммы указывая слева: enter image description here

, но я хочу, чтобы указать право вместо этого. Любая идея, как заставить это работать?

+0

Это должно работать: 'ggdendrogram (dend, поворот = F, лейблы = F, размер = 4, theme_dendro = F) + coord_flip() + scale_y_reverse()' –

ответ

1

На этом этапе пакет dendextend заменяет ggdendro.

set.seed(1) 
mat <- matrix(rnorm(100*10),nrow=100,ncol=10) 
dend <- as.dendrogram(hclust(dist(mat))) 
require(dendextend) 
gg_dend <- as.ggdend(dend) 
require(ggplot2) 
ggplot(gg_dend, labels = F)+coord_flip()+ scale_y_reverse() 

enter image description here

+0

я вижу. Но это еще медленнее:> microbenchmark (as.ggdend (dend)) Единица измерения: миллисекунды выраж мин LQ среднее медианное ид макс neval as.ggdend (dend) 553,2726 558,605 564,0724 561,7158 566,2058 600,0285 100 – dan

+0

as.ggdend должно быть медленным так как он извлекает больше функций (цвета, ширину линии и т. д.). Но как только вы использовали as.ggdend, объект может быть нанесен на обычном ggplot. Я не вижу простого способа сделать as.ggdend быстрее. –

Смежные вопросы