diff signac-vlnplot.R @ 0:6e0b320d8b6a draft default tip

"planemo upload commit dc808171975d0012e25bd7b32adc7a5a5c56a145-dirty"
author gaelcge
date Tue, 02 Aug 2022 19:11:27 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/signac-vlnplot.R	Tue Aug 02 19:11:27 2022 +0000
@@ -0,0 +1,214 @@
+#!/usr/bin/env Rscript
+
+# Load optparse we need to check inputs
+
+suppressPackageStartupMessages(require(optparse))
+
+# Load common functions
+
+suppressPackageStartupMessages(require(workflowscriptscommon))
+
+# parse options
+
+option_list = list(
+  make_option(
+    c("--signac-object"),
+    action = "store",
+    default = NA,
+    type = 'character',
+    help = ""
+  ),
+  make_option(
+    c("--features"),
+    action = "store",
+    default = NA,
+    type = 'character',
+    help = "File to be used to derive a vector of genes to test."
+  ),
+  make_option(
+    c("--cols"),
+    action = "store",
+    default = NULL,
+    type = 'character',
+    help = "File to be used to derive a vector of colors."
+  ),
+  make_option(
+    c("-p", "--pt-size"),
+    action = "store",
+    default = 1,
+    type = 'integer',
+    help = "Adjust point size for plotting."
+  ),
+  make_option(
+    c("--group-by"),
+    action = "store",
+    default = "ident",
+    type = 'character',
+    help = "Group (color) cells in different ways (for example, orig.ident)."
+  ),
+  make_option(
+    c("--sort"),
+    action = "store",
+    type = 'logical',
+    help = "Sort identity classes (on the x-axis) by the average expression of the attribute being potted, can also pass 'increasing' or 'decreasing' to change sort direction."
+  ),
+  make_option(
+    c("--assay"),
+    action = "store",
+    default = NULL,
+    type = 'character',
+    help = "Name of assay to use, defaults to the active assay."
+  ),
+  # make_option(
+  #   c("--split-by"),
+  #   action = "store",
+  #   default = NULL,
+  #   type = 'character',
+  #   help = "A variable to split the violin plots by."
+  # ),
+  make_option(
+    c("--same-y-lims"),
+    action = "store",
+    default = FALSE,
+    type = 'logical',
+    help = "Set all the y-axis limits to the same values."
+  ),
+  make_option(
+    c("--log"),
+    action = "store",
+    default = FALSE,
+    type = 'logical',
+    help = "plot the feature axis on log scale."
+  ),
+  make_option(
+    c("--ncol"),
+    action = "store",
+    default = NULL,
+    type = 'integer',
+    help = "Number of columns if multiple plots are displayed."
+  ),
+  make_option(
+    c("--slot"),
+    action = "store",
+    default = 'data',
+    type = 'character',
+    help = "Use non-normalized counts data for plotting."
+  ),
+  # make_option(
+  #   c("--split-plot"),
+  #   action = "store",
+  #   default = FALSE,
+  #   type = 'logical',
+  #   help = "plot each group of the split violin plots by multiple or single violin shapes."
+  # ),
+  make_option(
+    c("--stack"),
+    action = "store",
+    default = FALSE,
+    type = 'logical',
+    help = "Horizontally stack plots for each feature."
+  ),
+  make_option(
+    c("--fill-by"),
+    action = "store",
+    default = 'feature',
+    type = 'character',
+    help = "Color violins/ridges based on either 'feature' or 'ident'."
+  ),  
+  make_option(
+    c("--flip"),
+    action = "store",
+    default = FALSE,
+    type = 'logical',
+    help = "flip plot orientation (identities on x-axis)."
+  ), 
+  make_option(
+    c("--png-width"),
+    action = "store",
+    default = 1000,
+    type = 'integer',
+    help = "Width of png (px)."
+  ),
+  make_option(
+    c("--png-height"),
+    action = "store",
+    default = 1000,
+    type = 'integer',
+    help = "Height of png file (px)."
+  ),
+  make_option(
+    c("--output_image_file"),
+    action = "store",
+    default = NA,
+    type = 'character',
+    help = "File name in which to store serialized R matrix object."
+  ) 
+)
+
+opt <- wsc_parse_args(option_list)
+
+suppressPackageStartupMessages(require(Seurat))
+suppressPackageStartupMessages(require(Signac))
+
+set.seed(1234)
+
+if (! file.exists(opt$signac_object)){
+  stop((paste('File', opt$signac_object, 'does not exist')))
+}
+
+# Check features
+features <- NULL
+if (! is.null(opt$features) && opt$features != 'NULL'){
+  features <- strsplit(opt$features, ",")[[1]]
+}
+
+# Check cols
+cols <- NULL
+if (! is.null(opt$cols) && opt$cols != 'NULL'){
+  if (! file.exists(opt$cols)){
+    stop((paste('Supplied features file', opt$cols, 'does not exist')))
+  }else{
+    cols <- readLines(opt$cols)
+  }
+}
+
+# Check assay
+assay <- NULL
+if (! is.null(opt$assay) && opt$assay != 'NULL'){
+  assay <- opt$assay
+}
+
+# extract gene annotations from EnsDb
+signac_object <- readRDS(file = opt$signac_object)
+
+group_by <- if(opt$group_by == 'ident'){
+  NULL
+}else{
+  opt$group_by
+}
+
+# sort <- if(opt$sort == 'False'){
+#   FALSE
+# }else{
+#   TRUE
+# }
+
+png(filename = opt$output_image_file, width = opt$png_width, height = opt$png_height)
+VlnPlot(object = signac_object, 
+  features = features, 
+  cols = cols, 
+  pt.size = opt$pt_size, 
+  group.by = group_by,
+  sort = opt$sort,
+  assay = assay, 
+  #split.by = opt$split_by,
+  same.y.lims = opt$same_y_lims, 
+  log = opt$log, 
+  ncol = opt$ncol,
+  slot = opt$slot, 
+  #split.plot = opt$split_plot, 
+  stack = opt$stack,
+  fill.by = opt$fill_by, 
+  flip = opt$flip
+  )
+dev.off()