2015-12-16 6 views
1

Я использую пакет Sparcl (https://cran.r-project.org/web/packages/sparcl/sparcl.pdf) для построения дендрограмм в R. В моей конкретной проблеме я группирую группы по одному критерию, и я хочу визуализировать путем окраски на основе другой критерий (точка этого заключается в том, чтобы показать, что кластер совпадает (или не имеет) с другим признаком. Я смог сделать это с помощью пакета Sparcl, чтобы выделить узлы, которые я хочу подчеркнуть:Участок Довольно и выровненные цветные дендрограммы в R

df <- read.delim("the_data_matrix.txt"); 
d <- dist(as.matrix(df)) 
hc = hclust(d) 
y[]='black' 
y[list_of_nodes$V1]='red' # This will allow me to color only certain branches red, leaving the others black 

Если я использую стандартную функцию построения графика, я могу управлять различными параметрами, такими как метки и размер текста, с помощью зависания и cex (но не может покрасить любые ветки) (На рисунке это «Dendrogram 1»):

plot(hc,hang=-10,cex=.1) 

С другой стороны, если я сюжетом, используя функцию ColorDendrogram внутри SPARCL, я могу получить цветную дендрограмму, но теряет варианты форматирования (На картинке это «Дендрограмма 2»):

ColorDendrogram(hc, y = y, branchlength = 4) 

ColorDendrogram дал мне ошибки, когда я использовал зависание и cex для управления размером и размещением текста. enter image description here Мой вопрос

Кто-нибудь знает, как это исправить, или в пределах SPARCL пакета или другой? Я хотел бы иметь гибкость цвета, который имеет ColorDendrogram, но не теряет возможности форматирования.

+0

чек вне [пакет ggtree] (https://github.com/GuangchuangYu/ggtree) , Это будет немного обучения, но как только вы его получите, деревья намного проще построить. – jeremycg

ответ

1

Попробуйте пакет dendextend (vignette), который должен дать вам всю гибкость:

library(dendextend) 
d1 <- mtcars %>% dist %>% hclust %>% as.dendrogram 
d2 <- mtcars %>% dist(method="minkowski") %>% hclust(method="single") %>% as.dendrogram 
vals <- grep("Merc", rownames(mtcars), val=T) # highlight branches leading to "Merc..." 

par(mfrow=c(2, 1)) 
d1 %>% set("by_labels_branches_col", value = vals) %>% set("hang_leaves", -10) %>% set("labels_cex", .1) %>% plot 
d2 %>% set("by_labels_branches_col", value = vals) %>% plot 

enter image description here

+1

Простите мое невежество, но что делает «%>%»? – Jonathan

+1

Посмотрите на ''? Dendextend :: '%>%' '' или прочитайте виньетку: _ "dendextend поощряет использование оператора%>% (" pipe "или" chaining ") (импортированного из пакета magrittr), Что превращает x%>% f (y) в f (x, y), поэтому вы можете использовать его для перезаписи («цепочки») нескольких операций, чтобы их можно было читать слева направо, дно."_ – lukeA