horizontal dendrogram in R with labels horizontal dendrogram in R with labels r r

horizontal dendrogram in R with labels


Using dendrapply you can customize your dendro as you like.

enter image description here

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)


To show your defined labels in horizontal dendrogram, one solution is to set row names of data frame to new labels (all labels should be unique).

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

enter image description here

EDIT - solution using ggplot2

labs = paste("sta_",1:50,sep="") #new labelsrownames(USArrests)<-labs #set new row nameshc <- hclust(dist(USArrests), "ave")library(ggplot2)library(ggdendro)#convert cluster object to use with ggplotdendr <- dendro_data(hc, type="rectangle") #your own labels (now rownames) are supplied in geom_text() and label=labelggplot() +   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())

enter image description here