library(ggplot2)

name_color <- read.table("16s-color.csv", comment.char = "", sep = ",")
name <- name_color$V2
color <- name_color$V3
name_number <- length(name)
group_number <- 10

data <- data.frame(matrix(rnorm(name_number * group_number), name_number, group_number))
data3 <- NULL
for (i in 1 : group_number) {
    od <- order(data[, i])
    data2 <- NULL
    data2 <- cbind(data2, data[od, i])
    data2 <- cbind(data2, name[od])
    data2 <- cbind(data2, color[od])
    data2 <- cbind(data2, data.frame(group = rep(paste0("X", i), name_number)))
    data2[, 1] <- as.numeric(data2[, 1])
    pos <- which(data2[, 1] > 0)
    od_pos <- rev(pos)
    data2[pos, ] <- data2[od_pos, ]
    data3 <- rbind(data3, data2)
}
colnames(data3) <- c("Value", "Name", "Color", "Group")
data3$Value <- as.numeric(data3$Value)
data3$Name <- as.factor(data3$Name)
data3$Group <- factor(data3$Group, levels = paste0("X", seq(1, group_number)))

data3$Ordering <- factor(x = seq(1, name_number * group_number), levels = seq(1, name_number * group_number))

p <- ggplot(data3, aes(x=Group, y=Value, fill=Ordering)) + 
  geom_bar(stat="identity", position="stack") + 
  geom_hline(yintercept = 0, color = "black", size = 1) +
  scale_fill_manual(values=data3$Color) +
  labs(title="Stacked Bar Plot for 10 Groups", y="Value", x="Group") +
  theme_classic(base_size = 16) +
  theme(legend.position = "none")
print(p)