dendograma horizontal em R com labels

Eu estou tentando desenhar um dendrograma da saída da function hclust . Espero que o dendrograma seja organizado horizontalmente em vez do padrão, que pode ser obtido por (por exemplo)

 require(graphics) hc <- hclust(dist(USArrests), "ave") plot(hc) 

Eu tentei usar a function as.dendrogram() como plot(as.dendrogram(hc.poi),horiz=TRUE) mas o resultado é sem labels significativos:

insira a descrição da imagem aqui

Se eu usar plot(hc.poi,labels=c(...)) sem o as.dendrogram() , posso passar labels= argument, mas agora o dendrograma é vertical em vez de horizontal. Existe uma maneira de organizar o dendrograma simultaneamente e atribuir labels especificados pelo usuário? Obrigado!

Update : como um exemplo do dataset USArrests, suponha que eu queira usar as abreviações das duas primeiras letras dos nomes de estado como labels, de forma que eu queira de alguma forma passar labs para a function de plotagem:

labs = substr(rownames(USArrests),1,2)

que dá

  [1] "Al" "Al" "Ar" "Ar" "Ca" "Co" "Co" "De" "Fl" "Ge" "Ha" [12] "Id" "Il" "In" "Io" "Ka" "Ke" "Lo" "Ma" "Ma" "Ma" "Mi" [23] "Mi" "Mi" "Mi" "Mo" "Ne" "Ne" "Ne" "Ne" "Ne" "Ne" "No" [34] "No" "Oh" "Ok" "Or" "Pe" "Rh" "So" "So" "Te" "Te" "Ut" [45] "Ve" "Vi" "Wa" "We" "Wi" "Wy" 

Para mostrar seus labels definidos no dendrograma horizontal, uma solução é definir os nomes de linha do quadro de dados para novos labels (todos os labels devem ser exclusivos).

 require(graphics) labs = paste("sta_",1:50,sep="") #new labels USArrests2<-USArrests #new data frame (just to keep original unchanged) rownames(USArrests2)<-labs #set new row names hc <- hclust(dist(USArrests2), "ave") par(mar=c(3,1,1,5)) plot(as.dendrogram(hc),horiz=T) 

insira a descrição da imagem aqui

EDIT - solução usando ggplot2

 labs = paste("sta_",1:50,sep="") #new labels rownames(USArrests)<-labs #set new row names hc <- hclust(dist(USArrests), "ave") library(ggplot2) library(ggdendro) #convert cluster object to use with ggplot dendr <- dendro_data(hc, type="rectangle") #your own labels (now rownames) are supplied in geom_text() and label=label ggplot() + geom_segment(data=segment(dendr), aes(x=x, y=y, xend=xend, yend=yend)) + geom_text(data=label(dendr), aes(x=x, y=y, label=label, hjust=0), size=3) + coord_flip() + scale_y_reverse(expand=c(0.2, 0)) + theme(axis.line.y=element_blank(), axis.ticks.y=element_blank(), axis.text.y=element_blank(), axis.title.y=element_blank(), panel.background=element_rect(fill="white"), panel.grid=element_blank()) 

insira a descrição da imagem aqui

Usando dendrapply você pode personalizar seu dendro como quiser.

insira a descrição da imagem aqui

 colLab <- function(n) { if(is.leaf(n)) { a <- attributes(n) attr(n, "label") <- substr(a$label,1,2) # change the node label attr(n, "nodePar") <- c(a$nodePar, lab.col = 'red') # change the node color } n } require(graphics) hc <- hclust(dist(USArrests), "ave") clusDendro <- as.dendrogram(hc) clusDendro <- dendrapply(clusDendro, colLab) op <- par(mar = par("mar") + c(0,0,0,2)) plot(clusDendro,horiz=T) 
    Intereting Posts