#!/usr/bin/env Rscript 

#########################################################
# TASK: function for basic barplot returning stability counts
#########################################################
# load libraries and functions
library(ggplot2)
theme_set(theme_grey())
#==========================================================
# stability_count_bp(): basic barplots for stability counts
# input args
  ## df containing data to plot
  ## df column name containing stability outcome
  ## legend title
  ## ...opt args
#==========================================================
stability_count_bp <- function(plotdf
         , df_colname = ""
         , leg_title = ""
         , ats = 25     # axis text size
         , als = 22     # axis label size
         , lts = 20     # legend text size
         , ltis = 22    # label title size
         , geom_ls = 10 # geom_label size
         , yaxis_title = "Number of nsSNPs"
         , bp_plot_title = ""
         , label_categories = c("Destabilising", "Stabilising")
         , title_colour = "chocolate4"
         , subtitle_text = NULL
         , sts = 20
         , subtitle_colour = "pink"
         #, leg_position = c(0.73,0.8) # within plot area
         , leg_position = "top"){
 
#  OutPlot_count = ggplot(plotdf, aes(x = eval(parse(text = df_colname)))) +
  OutPlot_count = ggplot(plotdf, aes_string(x = df_colname)) +     
    geom_bar(aes(fill = eval(parse(text = df_colname))), show.legend = TRUE) +
    geom_label(stat = "count"
               , aes(label = ..count..)
               , color = "black"
               , show.legend = FALSE
               , size = geom_ls) +
    theme(axis.text.x = element_blank()
          , axis.title.x = element_blank()
          , axis.title.y = element_text(size =  als)
          , axis.text.y = element_text(size = ats)
          , legend.position = leg_position
          , legend.text = element_text(size = lts)
          , legend.title = element_text(size =  ltis)
          , plot.title = element_text(size =  als
                                      , colour = title_colour
                                      , hjust = 0.5)
          , plot.subtitle = element_text(size = sts
                                         , hjust = 0.5
                                         , colour = subtitle_colour)) + 
    labs(title      = bp_plot_title
         , subtitle = subtitle_text
         , y        = yaxis_title) + 
    scale_fill_discrete(name = leg_title
                        #, labels = c("Destabilising", "Stabilising")
                        , labels = label_categories)
  
  return(OutPlot_count)
}
#############################################################
# end of function
#############################################################
