2015-11-06 7 views
1

Я сгруппировал некоторые данные в r и построил результаты в виде дендрограммы. То, что я пытаюсь выяснить прямо сейчас, - это то, как я могу изменить цвет меток, так что одинаковые метки одинакового цвета.Как окрасить те же метки на dendorgram в один цвет в r

я получил дендрограммы используя следующий код:

> d<-stringdist::stringdistmatrix(AR_GenesforR$AR_Genes) 
> cl <-hclust(as.dist(d)) 
> plot(cl, label=AR_GenesforR$AR_Genes) 
> groups <- cutree(cl, k=2) 
> rect.hclust(cl, k=2, border="red") 

В результате дендрограммы выглядит следующим образом: enter image description here

То, что я хочу сделать сейчас, чтобы цвет все метки, которые являются одинаковыми в одного цвета, например. все 2010 желтый, все 2011 синий и прочее. Я исследовал довольно много, но в основном нашел способы окраски этикеток в соответствии с их кластерами. Кто-нибудь знает, как я могу делать то, что хочу?

+2

_ «только нашли способ окрашивать этикетки в соответствии с кластерами они находятся в» _ - ну, почему бы не думать о лейблах, как кластеры? Проверьте https://cran.r-project.org/web/packages/dendextend/vignettes/introduction.html#setting-a-dendrograms-labels – lukeA

+0

[Как сделать отличный воспроизводимый пример R?] (Http: // stackoverflow.com/questions/5963269) – zx8754

ответ

1

Эта функция, которая будет делать то, о чем вы просите, на основании пакета dendextend R (здесь короткий 2 page paper on the package).

x <- c(2011,2011,2012,2012,2015,2015,2015) 
names(x) <- x 
dend <- as.dendrogram(hclust(dist(x))) 

color_unique_labels <- function(dend, ...) { 
    if(!require(dendextend)) install.packages("dendextend") 
    if(!require(colorspace)) install.packages("colorspace") 
    library("dendextend") 

    n_unique_labels <- length(unique(labels(dend))) 
    colors <- colorspace::rainbow_hcl(n_unique_labels) 
    labels_number <- as.numeric(factor(labels(dend))) 
    labels_colors(dend) <- colors[labels_number] 
    dend 
} 


par(mfrow = c(1,2)) 
plot(dend) 
dend2 <- color_unique_labels(dend) 
plot(dend2) 

enter image description here

+0

обновление: теперь я добавил эту функцию в версию dendextend в github ... –

+1

Он работает, спасибо! Однако я использовал код немного по-другому, поскольку я кластер не на годы, а на другой параметр и добавляю годы как метки (обычно это делается с использованием «plot (cluster, labels = data $ column)», но это не работает в этот случай. Я очень новичок в R, но я думаю, причина в том, что уникальные метки «исправлены» в 'n_unique_labels <- length (unique (label (dend)))?? –

+1

Хорошо, можно решить это с помощью dendextent manual, используя 'dend = dend%>% set (" метки ", данные $ column)' –