"build.heatmap.label.table" = function(taxonomy.table, label.position = 2, label.source, taxonomy.order) { segment.table <- as.data.frame(matrix(0, length(label.source), 6)) dimnames(segment.table)[[1]] <- label.source dimnames(segment.table)[[2]] <- c("x1", "y1", "x2", "y2", "x3", "y3") j <- 1 segment.table[1, c(1, 3)] <- 0.5 for(i in 1:nrow(taxonomy.table)) { if(taxonomy.table[i, label.position] == label.source[j]) { next } if(taxonomy.table[i, label.position] != label.source[j]) { j <- j + 1 segment.table[j, c(1, 3)] <- i - 0.5 } } segment.table[, 2] <- -1 segment.table[, 4] <- nrow(taxonomy.table[taxonomy.order, ]) * -0.01 segment.table[, 5] <- nrow(taxonomy.table[taxonomy.order, ]) * -0.0125 segment.table[1:(nrow(segment.table) - 1), 6] <- segment.table[1:(nrow(segment.table) - 1), 1] + (segment.table[2:nrow(segment.table), 1] - segment.table[1:(nrow(segment.table) - 1), 1])/2 segment.table[nrow(segment.table), 6] <- ((nrow(taxonomy.table[taxonomy.order, ]) - segment.table[nrow(segment.table), 1]))/2 + segment.table[nrow(segment.table), 1] return(segment.table) }