Repository 'volcanoplot'
hg clone https://toolshed.g2.bx.psu.edu/repos/iuc/volcanoplot

Changeset 5:44608d0193ed (2021-06-06)
Previous changeset 4:73b8cb5bddcd (2019-08-04) Next changeset 6:83c573f2e73c (2021-06-10)
Commit message:
"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/volcanoplot commit 8464d1b013c316d88b37884be521c0ef50be5623"
modified:
volcanoplot.xml
added:
test-data/out.rscript
removed:
test-data/out.pdf
test-data/out2.pdf
volcanoplot.R
b
diff -r 73b8cb5bddcd -r 44608d0193ed test-data/out.pdf
b
Binary file test-data/out.pdf has changed
b
diff -r 73b8cb5bddcd -r 44608d0193ed test-data/out.rscript
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/out.rscript Sun Jun 06 09:12:22 2021 +0000
[
@@ -0,0 +1,103 @@
+
+# Galaxy settings start ---------------------------------------------------
+
+# setup R error handling to go to stderr
+options(show.error.messages = F, error = function() {cat(geterrmessage(), file = stderr()); q("no", 1, F)})
+
+# we need that to not crash galaxy with an UTF8 error on German LC settings.
+loc <- Sys.setlocale("LC_MESSAGES", "en_US.UTF-8")
+
+
+# Load packages -----------------------------------------------------------
+
+suppressPackageStartupMessages({
+    library(dplyr)
+    library(ggplot2)
+    library(ggrepel)
+})
+
+
+# Import data  ------------------------------------------------------------
+
+# Check if header is present by checking if P value column is numeric or not
+
+first_line <- read.delim('/private/var/folders/zn/m_qvr9zd7tq0wdtsbq255f8xypj_zg/T/tmpfpemuuun/files/8/3/7/dataset_8374ef6b-02c7-46f1-afc9-408a2a6cbde4.dat', header = FALSE, nrow = 1)
+
+first_pvalue <- first_line[, 3]
+
+if (is.numeric(first_pvalue)) {
+  print("No header row detected")
+  results <- read.delim('/private/var/folders/zn/m_qvr9zd7tq0wdtsbq255f8xypj_zg/T/tmpfpemuuun/files/8/3/7/dataset_8374ef6b-02c7-46f1-afc9-408a2a6cbde4.dat', header = FALSE)
+} else {
+  print("Header row detected")
+  results <- read.delim('/private/var/folders/zn/m_qvr9zd7tq0wdtsbq255f8xypj_zg/T/tmpfpemuuun/files/8/3/7/dataset_8374ef6b-02c7-46f1-afc9-408a2a6cbde4.dat', header = TRUE)
+}
+
+
+# Format data  ------------------------------------------------------------
+
+# Create columns from the column numbers specified
+results <- results %>% mutate(fdr = .[[4]],
+                              pvalue = .[[3]],
+                              logfc = .[[2]],
+                              labels = .[[1]])
+
+# Get names for legend
+down <- unlist(strsplit('Down,Not Sig,Up', split = ","))[1]
+notsig <- unlist(strsplit('Down,Not Sig,Up', split = ","))[2]
+up <- unlist(strsplit('Down,Not Sig,Up', split = ","))[3]
+
+# Set colours
+colours <- setNames(c("cornflowerblue", "grey", "firebrick"), c(down, notsig, up))
+
+# Create significant (sig) column
+results <- mutate(results, sig = case_when(
+                                fdr < 0.05 & logfc > 0.0 ~ up, 
+                                fdr < 0.05 & logfc < -0.0 ~ down, 
+                                TRUE ~ notsig))
+
+
+# Specify genes to label --------------------------------------------------
+labelfile <- read.delim('/private/var/folders/zn/m_qvr9zd7tq0wdtsbq255f8xypj_zg/T/tmpfpemuuun/files/4/2/f/dataset_42fc8a63-f9cc-435b-9bb3-dd106b708cd9.dat')
+results <- mutate(results, labels = ifelse(labels %in% labelfile[, 1], labels, ""))
+
+
+# Create plot -------------------------------------------------------------
+
+pdf("out.pdf")
+p <- ggplot(results, aes(x = logfc, y = -log10(pvalue))) +
+    geom_point(aes(colour = sig)) +
+    scale_color_manual(values = colours) +
+    scale_fill_manual(values = colours) +
+    theme(panel.grid.major = element_blank(),
+        panel.grid.minor = element_blank(),
+        panel.background = element_blank(),
+        axis.line = element_line(colour = "black"),
+        legend.key = element_blank())
+
+
+
+
+
+
+# Set legend title
+p <- p + labs(colour = "")
+
+# Add gene labels in boxes
+p <- p + geom_label_repel(aes(label = labels, fill = sig), 
+                          segment.colour = "black", 
+                          colour = "white", 
+                          min.segment.length = 0, 
+                          show.legend = FALSE)
+
+print(p)
+dev.off()
+
+
+# Save RData -------------------------------------------------------------
+save.image(file="volcanoplot.RData")
+
+
+# R and Package versions -------------------------------------------------
+sessionInfo()
+
b
diff -r 73b8cb5bddcd -r 44608d0193ed test-data/out2.pdf
b
Binary file test-data/out2.pdf has changed
b
diff -r 73b8cb5bddcd -r 44608d0193ed volcanoplot.R
--- a/volcanoplot.R Sun Aug 04 10:53:30 2019 -0400
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
[
@@ -1,111 +0,0 @@
-# setup R error handling to go to stderr
-options( show.error.messages=F, error = function () { cat( geterrmessage(), file=stderr() ); q( "no", 1, F ) } )
-
-# we need that to not crash galaxy with an UTF8 error on German LC settings.
-loc <- Sys.setlocale("LC_MESSAGES", "en_US.UTF-8")
-
-suppressPackageStartupMessages({
-    library(dplyr)
-    library(getopt)
-    library(ggplot2)
-    library(ggrepel)
-})
-
-options(stringAsFactors = FALSE, useFancyQuotes = FALSE)
-args <- commandArgs(trailingOnly = TRUE)
-
-spec <- matrix(c(
-    "input", "i", 1, "character",
-    "fdr_col", "a", 1, "integer",
-    "pval_col", "p", 1, "integer",
-    "lfc_col", "c", 1, "integer",
-    "label_col", "l", 1, "integer",
-    "signif_thresh", "s", 1, "double",
-    "lfc_thresh", "x", 1, "double",
-    "label_file", "f", 1, "character",
-    "top_num", "t", 1, "integer",
-    "title", "T", 1, "character",
-    "xlab", "X", 1, "character",
-    "ylab", "Y", 1, "character",
-    "xmin", "m", 1, "double",
-    "xmax", "M", 1, "double",
-    "ymax", "W", 1, "double",
-    "legend", "L", 1, "character",
-    "llabs", "z", 1, "character",
-    "boxes", "b", 0, "logical"),
-    byrow=TRUE, ncol=4)
-opt <- getopt(spec)
-
-# Below modified from http://www.gettinggeneticsdone.com/2016/01/repel-overlapping-text-labels-in-ggplot2.html
-
-results <- read.delim(opt$input)
-results$fdr <- results[, opt$fdr_col]
-results$Pvalue <- results[, opt$pval_col]
-results$logFC <- results[, opt$lfc_col]
-results$labels <- as.character(results[, opt$label_col])
-label_down <- unlist(strsplit(opt$llabs, split=","))[1]
-label_notsig <- unlist(strsplit(opt$llabs, split=","))[2]
-label_up <- unlist(strsplit(opt$llabs, split=","))[3]
-colours <- setNames(c("cornflowerblue","grey","firebrick"),c(label_down,label_notsig,label_up))
-
-results <- mutate(results, sig=ifelse((fdr<opt$signif_thresh & logFC>opt$lfc_thresh), label_up, ifelse((fdr<opt$signif_thresh & logFC < -opt$lfc_thresh),label_down, label_notsig)))
-results <- results[order(results$Pvalue),]
-if (!is.null(opt$label_file)) {
-    labelfile <- read.delim(opt$label_file, stringsAsFactors=FALSE)
-    # label genes specified in file
-    results <- mutate(results, labels=ifelse(labels %in% labelfile[, 1], labels, ""))
-} else if (is.null(opt$top_num)) {
-    # label all significant genes
-    results <- mutate(results, labels=ifelse(sig != label_notsig, labels, ""))
-} else if (opt$top_num > 0) {
-    # label only top significant genes
-    top <- filter(results, sig != label_notsig) %>% top_n(n=-opt$top_num, Pvalue)
-    results <- mutate(results, labels=ifelse(labels %in% top$labels, labels, ""))
-} else if (opt$top_num == 0) {
-    # no labels
-    results$labels <- NULL
-}
-
-pdf("out.pdf")
-p <- ggplot(results, aes(logFC, -log10(Pvalue))) +
-    geom_point(aes(col=sig)) +
-    scale_color_manual(values=colours) +
-    scale_fill_manual(values=colours) +
-    theme(panel.grid.major = element_blank(),
-        panel.grid.minor = element_blank(),
-        panel.background = element_blank(),
-        axis.line = element_line(colour = "black"),
-        legend.key=element_blank())
-if (!is.null(opt$title)) {
-    p <- p + ggtitle(opt$title)
-}
-if (!is.null(opt$xlab)) {
-    p <- p + xlab(opt$xlab)
-}
-if (!is.null(opt$ylab)) {
-    p <- p + ylab(opt$ylab)
-}
-if (!is.null(opt$xmin) & !is.null(opt$xmax)) {
-    p <- p + xlim(opt$xmin, opt$xmax)
-}
-if (!is.null(opt$ymax)) {
-    p <- p + ylim(0, opt$ymax)
-}
-if (!is.null(opt$legend)) {
-    p <- p + labs(colour=opt$legend)
-} else {
-    p <- p + labs(colour="")
-}
-if (!is.null(results$labels)) {
-    if (!is.null(opt$boxes)) {
-        p <- p + geom_label_repel(aes(label=labels, fill=sig), segment.colour="black", colour="white", min.segment.length=0, show.legend=FALSE)
-    } else {
-        p <- p + geom_text_repel(aes(label=labels, col=sig), min.segment.length=0, box.padding=0.3, point.padding=0.3, show.legend=FALSE)
-    }
-}
-
-print(p)
-dev.off()
-
-cat("Session information:\n\n")
-sessionInfo()
\ No newline at end of file
b
diff -r 73b8cb5bddcd -r 44608d0193ed volcanoplot.xml
--- a/volcanoplot.xml Sun Aug 04 10:53:30 2019 -0400
+++ b/volcanoplot.xml Sun Jun 06 09:12:22 2021 +0000
[
b'@@ -1,61 +1,180 @@\n-<tool id="volcanoplot" name="Volcano Plot" version="0.0.3">\n+<tool id="volcanoplot" name="Volcano Plot" version="0.0.4">\n     <description>create a volcano plot</description>\n+    <edam_topics>\n+        <edam_topic>topic_0092</edam_topic>\n+    </edam_topics>\n+    <edam_operations>\n+        <edam_operation>operation_0337</edam_operation>\n+    </edam_operations>\n     <requirements>\n-        <requirement type="package" version="3.1.0">r-ggplot2</requirement>\n-        <requirement type="package" version="0.8.0">r-ggrepel</requirement>\n-        <requirement type="package" version="0.7.8">r-dplyr</requirement>\n-        <requirement type="package" version="1.20.2">r-getopt</requirement>\n+        <requirement type="package" version="3.3.3">r-ggplot2</requirement>\n+        <requirement type="package" version="0.9.1">r-ggrepel</requirement>\n+        <requirement type="package" version="1.0.6">r-dplyr</requirement>\n     </requirements>\n     <version_command><![CDATA[\n-echo $(R --version | grep version | grep -v GNU)", ggplot2 version" $(R --vanilla --slave -e "library(ggplot2); cat(sessionInfo()\\$otherPkgs\\$ggplot2\\$Version)" 2> /dev/null | grep -v -i "WARNING: ")", ggrepel version" $(R --vanilla --slave -e "library(ggrepel); cat(sessionInfo()\\$otherPkgs\\$ggrepel\\$Version)" 2> /dev/null | grep -v -i "WARNING: ")", dplyr version" $(R --vanilla --slave -e "library(dplyr); cat(sessionInfo()\\$otherPkgs\\$dplyr\\$Version)" 2> /dev/null | grep -v -i "WARNING: ")", getopt version" $(R --vanilla --slave -e "library(getopt); cat(sessionInfo()\\$otherPkgs\\$getopt\\$Version)" 2> /dev/null | grep -v -i "WARNING: ")\n+echo $(R --version | grep version | grep -v GNU)", ggplot2 version" $(R --vanilla --slave -e "library(ggplot2); cat(sessionInfo()\\$otherPkgs\\$ggplot2\\$Version)" 2> /dev/null | grep -v -i "WARNING: ")", ggrepel version" $(R --vanilla --slave -e "library(ggrepel); cat(sessionInfo()\\$otherPkgs\\$ggrepel\\$Version)" 2> /dev/null | grep -v -i "WARNING: ")", dplyr version" $(R --vanilla --slave -e "library(dplyr); cat(sessionInfo()\\$otherPkgs\\$dplyr\\$Version)" 2> /dev/null | grep -v -i "WARNING: ")\n     ]]></version_command>\n     <command detect_errors="exit_code"><![CDATA[\n-\n-Rscript \'${__tool_directory__}/volcanoplot.R\'\n-\n-    -i \'$input\'\n-    -a $fdr_col\n-    -p $pval_col\n-    -c $lfc_col\n-    -l $label_col\n-    -s $signif_thresh\n-    -x $lfc_thresh\n-    #if $labels.label_select == \'file\':\n-        -f \'$labels.label_file\'\n-    #else if $labels.label_select == \'signif\':\n-        #if $labels.top_num:\n-            -t $labels.top_num\n-        #end if\n-    #else\n-        -t 0\n-    #end if\n-    #if $plot_options.boxes:\n-        -b\n+    #if $out_options.rscript_out:\n+        cp \'${volcanoplot_script}\' rscript.txt &&\n     #end if\n-    #if $plot_options.title:\n-        -T \'$plot_options.title\'\n-    #end if\n-    #if $plot_options.xlab:\n-        -X \'$plot_options.xlab\'\n-    #end if\n-    #if $plot_options.ylab:\n-        -Y \'$plot_options.ylab\'\n-    #end if\n-    #if $plot_options.xmin:\n-        -m \'$plot_options.xmin\'\n+    Rscript \'${volcanoplot_script}\'\n+]]></command>\n+    <configfiles>\n+        <configfile name="volcanoplot_script"><![CDATA[\n+# Galaxy settings start ---------------------------------------------------\n+\n+# setup R error handling to go to stderr\n+options(show.error.messages = F, error = function() {cat(geterrmessage(), file = stderr()); q("no", 1, F)})\n+\n+# we need that to not crash galaxy with an UTF8 error on German LC settings.\n+loc <- Sys.setlocale("LC_MESSAGES", "en_US.UTF-8")\n+\n+\n+# Load packages -----------------------------------------------------------\n+\n+suppressPackageStartupMessages({\n+    library(dplyr)\n+    library(ggplot2)\n+    library(ggrepel)\n+})\n+\n+\n+# Import data  ------------------------------------------------------------\n+\n+# Check if header is present by checking if P value column is numeric or not\n+\n+first_line <- read.delim(\'$input\', header = FALSE, nrow = 1)\n+\n+first_pvalue <- first_line[, $pval_'..b' <param name="label_file" ftype="tabular" value="labels.tab" />\n-            <output name="plot" value= "out2.pdf" compare="sim_size" />\n+            <output name="plot">\n+                <assert_contents>\n+                    <has_size value= "936522" delta="1000" />\n+                </assert_contents>\n+            </output>\n+        </test>\n+        <test expect_num_outputs="3">\n+            <!-- Ensure rscript and rdata outputs work -->\n+            <param name="input" ftype="tabular" value="input.tab"/>\n+            <param name="fdr_col" value="4" />\n+            <param name="pval_col" value="3" />\n+            <param name="lfc_col" value="2" />\n+            <param name="label_col" value="1" />\n+            <param name="lfc_thresh" value="0" />\n+            <param name="label_select" value="file"/>\n+            <param name="label_file" ftype="tabular" value="labels.tab" />\n+            <param name="rscript_out" value="True"/>\n+            <param name="rdata_out" value="True"/>\n+            <output name="plot">\n+                <assert_contents>\n+                    <has_size value= "936522" delta="1000" />\n+                </assert_contents>\n+            </output>\n+            <output name="rscript" value= "out.rscript" lines_diff="8"/>\n+            <output name="rdata">\n+                <assert_contents>\n+                    <has_size value= "589613" delta="1000" />\n+                </assert_contents>\n+            </output>\n         </test>\n     </tests>\n     <help><![CDATA[\n@@ -122,7 +286,7 @@\n \n **What it does**\n \n-This tool creates a Volcano plot using ggplot2. Points can be labelled via ggrepel.\n+This tool creates a Volcano plot using ggplot2. Points can be labelled via ggrepel. It was inspired by this Getting Genetics Done `blog post`_.\n \n In statistics, a `Volcano plot`_ is a type of scatter-plot that is used to quickly identify changes in large data sets composed of replicate data. It plots significance versus fold-change on the y and x axes, respectively. These plots are increasingly common in omic experiments such as genomics, proteomics, and metabolomics where one often has a list of many thousands of replicate data points between two conditions and one wishes to quickly identify the most meaningful changes. A volcano plot combines a measure of statistical significance from a statistical test (e.g., a p value from an ANOVA model) with the magnitude of the change, enabling quick visual identification of those data-points (genes, etc.) that display large magnitude changes that are also statistically significant.\n \n@@ -134,13 +298,15 @@\n \n **Inputs**\n \n-A tabular file with a header row containing the columns below (additional columns may be present):\n+A tabular file containing the columns below (additional columns may be present):\n \n     * P value\n     * FDR / adjusted P value\n     * Log fold change\n     * Labels (e.g. Gene symbols or IDs)\n \n+The tool will auto-detect if a header is present, by checking if the first row in the P value column is a number or not. \n+\n All significant points, those meeting the specified FDR and Log Fold Change thresholds, will be coloured, red for upregulated, blue for downregulated. Users can choose to apply labels to the points (such as gene symbols) from the Labels column. To label all significant points, select "Significant" for the **Points to label** option, or to only label the top most significant specify a number under "Only label top most significant". Users can label any points of interest through selecting **Points to label** "Input from file" and providing a tabular labels file. The labels file must contain a header row and have the labels in the first column. These labels must match the labels in the main input file.\n \n **Outputs**\n@@ -150,6 +316,7 @@\n .. image:: $PATH_TO_IMAGES/volcano_plot.png\n \n .. _Volcano plot: https://en.wikipedia.org/wiki/Volcano_plot_(statistics)\n+.. _blog post: https://gettinggeneticsdone.blogspot.com/2016/01/\n \n     ]]></help>\n     <citations>\n'