Return horizontally a dendrogram of the function [pvclust] on R

67 Views Asked by At

I would like to return a dendrogram of the [pvclust] function as above without losing the information (height, au value, bp value and edge value).

This dendrogram

To obtain this dendrogram with the information from the first dendrogram

I tried the following formulas but it didn't work:

  • plot_horiz.dendrogram(pv, side = F)
  • plot(pv, ylim=c(0,0.004), horiz = F)
  • pv <-as.dendrogram(pv) plot(pv, horiz = T)

Thanks

1

There are 1 best solutions below

0
On BEST ANSWER

you need to modify the pvclust text function like here mytext is the customized version (you can copy past it)

mytext=function (x, col = c(au = 2, bp = 3, edge = 8), print.num = TRUE, 
          float = 0.01, cex = NULL, font = NULL, ...) 
{
  if (length(col) == 3 && is.null(names(col))) 
    names(col) <- c("au", "bp", "edge")
  axes <- pvclust:::hc2axes(x$hclust)
  usr <- par()$usr
  wid <- usr[4] - usr[3]
  num_str <- lapply(x$edges[seq_len(which(names(x$edges) == 
                                            "bp"))], function(p) round(p * 100))
  for (i in names(num_str)) {
    num_str[[i]][length(num_str[[i]])] <- i
  }
  if (print.num) {
    num_str$edge <- as.character(row.names(x$edges))
    num_str$edge[length(num_str$edge)] <- "edge #"
  }
  else {
    col <- col[names(col) != "edge"]
  }
  if (length(col) <= 1) {
    range <- 1
    pos <- 1
    y_offset <- 0
  }
  else if (length(col) <= 3) {
    range <- seq_len(min(3, length(col)))
    pos <- c(2, 4, 1)
    y_offset <- float * wid * c(1, 1, 0)
  }
  else {
    range <- 1:4
    pos <- c(2, 4, 2, 4)
    y_offset <- c(float, float, 0.01, 0.01) * wid * c(1, 
                                                      1, -2, -2)
  }
  for (i in range) {
    name <- names(col)[i]
    text(x = axes[, 2], y = axes[, 1] + y_offset[i], num_str[[name]], 
         col = col[name], pos = pos[i], offset = 0.3, cex = cex, 
         font = font)
  }
}

here a reproducible example :

library(pvclust)
data(Boston, package = "MASS")
boston.pv <- pvclust(Boston, nboot=100, parallel=FALSE)

plot(as.dendrogram(boston.pv$hclust),horiz=TRUE)

mytext(boston.pv)  # we use the customized text function here 

Horiz plot