2013-08-03 21 views
8

Mi piacerebbe creare un dendrogramma in R che abbia rami colorati, come quello mostrato sotto. enter image description hereCome creare un dendrogramma con rami colorati?

Finora ho usato i seguenti comandi per creare un dendrogramma di serie:

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 

Come dovrei modificare questo codice per ottenere risultato desiderato?

Grazie in anticipo per il vostro aiuto.

risposta

-1

FigTree può fare dendrogrammi a colori. Vedi ad esempio questo paper.

per ottenere i dati in Figtree da una matrice di distanza R dm,

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

Si dovrebbe usare dendrapply (help document).

Per esempio:

# 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) 

che dà:

Colored dendrogram

8

è possibile utilizzare il pacchetto dendextend, finalizzato per attività di questo tipo:

# 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 

enter image description here

È possibile visualizzare molti esempi nelle presentazioni e nelle vignette del pacchetto, nella sezione "Utilizzo" nel seguente URL: https://github.com/talgalili/dendextend