Как пометить конечные узлы вырезанной дендрограммы? - PullRequest
4 голосов
/ 26 августа 2011

Я использовал следующий код, чтобы вырезать дендрограмму на определенной высоте. У меня проблема в том, что, когда я вырезал дендрограмму, я не могу понять, как добавить метки к узлам. Как я могу вырезать дендрограмма с метками с использованием программы R?

library(Heatplus)
cc=as.dendrogram(hclust(as.dist(mat),method="single"))
cutplot.dendrogram(cc,h=20)

Ответы [ 3 ]

6 голосов
/ 26 августа 2011

После большого количества копания в справочной документации по ?dendrogram я наткнулся на функцию dendrapply, которая содержит пример, чтобы сделать что-то очень похожее. Вот ваше решение, основанное на модификации примера в ?dendrapply:

Создать дендрограмму и вырезать на высоте h=20:

dhc <- as.dendrogram(hc <- hclust(dist(USArrests), "ave"))
chc <- cut(dhc, h=20)$upper

Определите вектор с помощью newLabels и функции newLab, которая изменяет отдельную метку узла. Затем передайте это dendrapply:

newLabels <- paste("Custom", 1:22, sep="_")

local({
      newLab <<- function(n) {
        if(is.leaf(n)) {
          a <- attributes(n)
          i <<- i+1
          attr(n, "label") <- newLabels[i]
        }
        n
      }
      i <- 0
    })

nhc <- dendrapply(chc, newLab)
labels(nhc)
 [1] "Custom_1"  "Custom_2"  "Custom_3"  "Custom_4"  "Custom_5"  "Custom_6" 
 [7] "Custom_7"  "Custom_8"  "Custom_9"  "Custom_10" "Custom_11" "Custom_12"
[13] "Custom_13" "Custom_14" "Custom_15" "Custom_16" "Custom_17" "Custom_18"
[19] "Custom_19" "Custom_20" "Custom_21" "Custom_22"

plot(nhc)

enter image description here

0 голосов
/ 30 января 2014
cc$labels

Это вектор всех элементов в дендограмме.

cc$labels <- myVector

Вы можете добавить свой собственный вектор для изменения меток

0 голосов
/ 09 декабря 2013

Вот модифицированное решение, написанное Андри, но использующее новый пакет под названием " dendextend ", созданный именно для такого рода вещей.

Вы можете увидеть множество примеров в презентациях и виньетках пакета, в разделе «Использование» по следующему URL: https://github.com/talgalili/dendextend

Вот решение этого вопроса:

# define dendrogram object to play with:
dhc <- as.dendrogram(hc <- hclust(dist(USArrests), "ave"))
chc <- cut(dhc, h=20)$upper
# loading the package
require(dendextend)# let's add some color:
# change labels with a simple assignment:
labels(chc) <- paste("Custom", 1:22, sep="_")
plot(chc)

Для установки пакета (поскольку я еще не загружал его в CRAN), используйте:

####################
## installing dendextend for the first time:

if (!require('installr')) install.packages('installr'); require('installr')
## install.Rtools() # run this if you are using Windows and don't have Rtools
require2(devtools)
install_github('dendextend', 'talgalili')
require2(Rcpp)
install_github('dendextendRcpp', 'talgalili')

Лучший, Tal

...