Как создать дендрограмму с разноцветными ветвями?

Я хотел бы создать дендрограмму в R с цветными ветвями, как показано ниже. введите описание изображения здесь

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

d <- dist(as.matrix(data[,29]))   # find distance matrix 
 hc <- hclust(d)                # apply hirarchical clustering 
 plot(hc,labels=data[,1], main="", xlab="") # plot the dendrogram

Как мне изменить этот код, чтобы получить желаемый результат?

Заранее спасибо за помощь.


person Community    schedule 03.08.2013    source источник


Ответы (3)


Вы можете использовать пакет dendextend, предназначенный для таких задач:

# install the package:
if (!require('dendextend')) install.packages('dendextend'); library('dendextend')

## Example:
dend <- as.dendrogram(hclust(dist(USArrests), "ave"))
d1=color_branches(dend,k=5, col = c(3,1,1,4,1))
plot(d1) # selective coloring of branches :)
d2=color_branches(d1,k=5) # auto-coloring 5 clusters of branches.
plot(d2)
# More examples are in ?color_branches

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

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

person Tal Galili    schedule 30.11.2013

Вам следует использовать dendrapply (справочный документ).

Например:

# Generate data
set.seed(12345)
desc.1 <- c(rnorm(10, 0, 1), rnorm(20, 10, 4))
desc.2 <- c(rnorm(5, 20, .5), rnorm(5, 5, 1.5), rnorm(20, 10, 2))
desc.3 <- c(rnorm(10, 3, .1), rnorm(15, 6, .2), rnorm(5, 5, .3))

data <- cbind(desc.1, desc.2, desc.3)

# Create dendrogram
d <- dist(data) 
hc <- as.dendrogram(hclust(d))

# Function to color branches
colbranches <- function(n, col)
  {
  a <- attributes(n) # Find the attributes of current node
  # Color edges with requested color
  attr(n, "edgePar") <- c(a$edgePar, list(col=col, lwd=2))
  n # Don't forget to return the node!
  }

# Color the first sub-branch of the first branch in red,
# the second sub-branch in orange and the second branch in blue
hc[[1]][[1]] = dendrapply(hc[[1]][[1]], colbranches, "red")
hc[[1]][[2]] = dendrapply(hc[[1]][[2]], colbranches, "orange")
hc[[2]] = dendrapply(hc[[2]], colbranches, "blue")

# Plot
plot(hc)

Который дает:

Цветная дендрограмма

person nico    schedule 03.08.2013

FigTree может создавать цветные дендрограммы. См., Например, этот документ.

Чтобы получить данные в FigTree из матрицы расстояний R dm,

library(ape)
z <- as.phylo(hclust(as.dist(dm)))
write.nexus(z, file="output.nex")
person momeara    schedule 03.08.2013