view barplot.r @ 8:3519c2de7fac draft

"planemo upload for repository https://github.com/ARTbio/tools-artbio/tree/master/tools/sr_bowtie_dataset_annotation commit e62066428e669516e024d081933ee8c7f953ba1b"
author artbio
date Sat, 09 Apr 2022 22:45:21 +0000
parents 3bddd7ab96e3
children fd4a60fc3fca
line wrap: on
line source

if (length(commandArgs(TRUE)) == 0) {
  system("Rscript barplot.r -h", intern = F)
  q("no")
}

# load packages that are provided in the conda env
options(show.error.messages = F,
       error = function() {
           cat(geterrmessage(), file = stderr())
                           q("no", 1, F)
       }
)
loc <- Sys.setlocale("LC_MESSAGES", "en_US.UTF-8")
warnings()
library(optparse)
library(ggplot2)
library(ggrepel)
library(RColorBrewer)

option_list <- list(
  make_option(
    c("-i", "--input"),
    default = NA,
    type = "character",
    help = "Input file that contains count data (no header)"
  ),
  make_option(
    c("-o", "--barplot"),
    default = NA,
    type = "character",
    help = "PDF output file"
  )
)

opt <- parse_args(OptionParser(option_list = option_list),
                 args = commandArgs(trailingOnly = TRUE))

annotations <- read.delim(opt$input, header = F)
colnames(annotations) <- c("sample", "class", "percent_of_reads", "total")
annotations$percent <- round(annotations$percent_of_reads / annotations$total * 100,
                            digits = 2)
## ggplot2 plotting

# Define the number of colors you want
mycolors <- c("#e6194b", "#3cb44b", "#ffe119", "#4363d8", "#f58231",
                              "#911eb4", "#46f0f0", "#f032e6", "#bcf60c",
                              "#008080", "#e6beff", "#9a6324", "#fffac8", "#800000",
                              "#aaffc3", "#808000", "#ffd8b1", "#000075", "#808080")
ggtitle("Class proportions")
ggplot(annotations, aes(x = total / 2, y = percent_of_reads, fill = class, width = total)) +
       geom_bar(position = "fill", stat = "identity") +
       facet_wrap(~sample, ncol = 3) +
       geom_label_repel(aes(label = percent), position = position_fill(vjust = 0.5),
                        size = 2, show.legend = F) +
       coord_polar(theta = "y") +
       labs(x = "Class fractions (%)") +
       scale_fill_manual(values = mycolors) +
       theme(axis.text = element_blank(),
             axis.ticks = element_blank(),
             panel.grid  = element_blank(),
             axis.title.y = element_blank(),
             legend.position = "bottom") +
       geom_text(aes(x = total / 2, y = .5, label = paste(round(total / 1000000, digits = 3),
                     "M"),
                 vjust = 4, hjust = -1), size = 2)
ggsave(file = opt$barplot, device = "pdf")