changeset 0:c21099566418 draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/ggplot2 commit f9fb73a88ab8b52ce11c25a966d4fe99e67c9fbf
author iuc
date Mon, 11 Jun 2018 16:05:29 -0400
parents
children bb6ec8e5387f
files ggplot2_pca.xml macros.xml test-data/ggplot_heatmap2_result1.pdf test-data/ggplot_heatmap_result1.pdf test-data/ggplot_histogram_result1.pdf test-data/ggplot_pca_result1.pdf test-data/ggplot_point_result1.pdf test-data/ggplot_violin_result1.pdf test-data/mtcars.txt
diffstat 9 files changed, 719 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ggplot2_pca.xml	Mon Jun 11 16:05:29 2018 -0400
@@ -0,0 +1,395 @@
+<tool id="ggplot2_pca" name="PCA plot w ggplot2" version="@VERSION@">
+    <macros>
+        <import>macros.xml</import>
+    </macros>
+    <requirements>
+        <requirement type="package" version="0.4.3">r-ggfortify</requirement>
+        <requirement type="package" version="1.2.1">r-svglite</requirement>
+    </requirements>
+    <command detect_errors="exit_code"><![CDATA[
+cat '$script' &&
+Rscript '$script'
+    ]]></command>
+    <configfiles>
+        <configfile name="script"><![CDATA[
+@R_INIT@
+
+## Import libraries
+library(ggfortify)
+library(scales)
+
+## static VARs
+groups <- TRUE
+circles_boolean <- TRUE
+group_name <- list()
+group_cols <- list()
+group_colors <- list()
+group_feature <- ""
+group_colors_vector <- ""
+
+input <- '$input1'
+header <- ${inputdata.header}
+rowname_index <- as.integer('$inputdata.row_names_index')
+
+horizontal <- ${inputdata.sample_name_orientation}
+## title <- '$title'
+transform <- '$adv.transform'
+## background <- '$adv.theme'
+## scaling <- '$adv.scaling.plot_scaling'
+## legend <- '$adv.legend'
+group_type <- '$groups.group_type'
+
+##if(group_type == "define_groups"){
+#if str($groups.group_type) == "define_groups":
+    #for $q in $groups.group_names:
+        group_name <- append(group_name, '$q.groupName')
+        group_cols <- append(group_cols, '$q.groupCols')
+        group_colors <- append(group_colors, '$q.color_cond.plot_color')
+    #end for
+#end if
+group_name <- unlist(group_name)
+group_cols <- unlist(group_cols)
+group_colors <- unlist(group_colors)
+
+circles <- '$groups.circle'
+plot_param <- '$plotoptions'
+
+## split plotoptions
+plot_param_list <- strsplit(x = plot_param, split = ",")
+plot_options <- c("shape", "label") %in% plot_param_list[[1]]
+
+## read table with or with out header or row_names
+if(rowname_index > 0){
+    df <- read.table(input, header = header, row.names = rowname_index, sep = "\t")
+}else{
+    df <- read.table(input, header = header, sep = "\t")
+}
+
+## check if indices are out of range
+num_cols <- length(names(df))
+if(group_type == "define_groups"){
+    check_col_indices <- as.integer(unlist(strsplit(group_cols, split = ",")))
+    if(any(check_col_indices > num_cols)){
+        stop("Error: column indices for grouping are out of range! Check help!")
+    }
+}
+
+## check if table has only numbers
+if(any(!sapply(df, is.numeric))){
+    stop("Error: table contains not only numbers!")
+}
+
+## check if group_names are unique
+if(length(unique(c(group_name, "no_group"))) != length(c(group_name, "no_group"))){
+    stop("Error: group_names must be unique: ", paste(group_name, "no_group", collapse = ","), " is not unique!")
+}
+
+## prepare group_features for grouping of samples accouring to orientation
+if(horizontal){
+    num_cols <- length(names(df))
+    group_feature <- rep("no_group", num_cols)
+}else{
+    num_rows <- nrow(df)
+    group_feature <- rep("no_group", num_rows)
+}
+
+default_ggplot_colors <- ""
+default_ggplot_colors_autoplot <- ""
+## split group elements and assign indexes
+if(group_type == "define_groups"){
+    ## set up colors
+    color_names <- c(group_name, "no_group")
+    cat("\ncolor_names: ", color_names)
+    default_ggplot_colors <- hue_pal()(length(color_names))
+    names(default_ggplot_colors) <- color_names
+    cat("\ndefault_ggplot_colors: ", default_ggplot_colors)
+    names(group_colors) <- group_name
+    group_colors <- group_colors[group_colors != "none"]
+    default_ggplot_colors[names(group_colors)] <- group_colors
+    cat("\ndefault_ggplot_colors: ", default_ggplot_colors)
+    group_string <- lapply(seq_along(group_name), function(k){
+        gname <- group_name[k]
+        gindex <- as.integer(strsplit(group_cols[k], split = ",")[[1]])
+        gnames <- rep(gname, length(gindex))
+        names(gindex) <- gnames
+        gindex
+    })
+    group_string <- do.call(c, group_string)
+    group_feature[group_string] <- names(group_string)
+    ## subset colors on groups if and check if there is "no_group" present
+    default_ggplot_colors <- default_ggplot_colors[unique(group_feature)]
+    default_ggplot_colors_autoplot <- default_ggplot_colors[group_feature]
+    cat("\ndefault_ggplot_colors: ", default_ggplot_colors)
+}
+
+@LEGEND@
+
+@XY_SCALING@
+
+@THEME@
+
+## transpose data.frame for plotting if sample names are horizontal
+if(horizontal){
+    df <- as.data.frame(t(df))
+}
+
+plot_df <- df
+## set group column if wanted
+if(group_type %in% "no_groups"){
+    groups <- FALSE
+}else{
+    plot_df\$group <- group_feature
+    group_name <- "group"
+}
+
+## set boolean elipes_value to plot circle options
+if(circles %in% "no"){
+    circles_boolean <- FALSE
+}
+
+plot_mat <- df
+
+## transform dataset
+if(transform == "log2"){
+    plot_mat <- log2(plot_mat)
+    cat("\n ", transform, " transformed")
+}else if(transform == "log2plus1"){
+    plot_mat <- log2(plot_mat+1)
+    cat("\n ", transform, " transformed")
+}else if(transform == "log10"){
+    plot_mat <- log10(plot_mat)
+    cat("\n ", transform, " transformed")
+}else if(transform == "log10plus1"){
+    plot_mat <- log10(plot_mat+1)
+    cat("\n ", transform, " transformed")
+}else{
+    plot_mat <- plot_mat
+}
+
+## plot with or without groups and set more plotting options using autoplot
+if(groups){
+    if(circles_boolean){
+        plot_out <- autoplot(prcomp(plot_mat), data = plot_df, colour = group_name,
+        frame = T, frame.type=circles, shape = plot_options[1],
+        label = plot_options[2])
+    }else{
+        plot_out <- autoplot(prcomp(plot_mat), data = plot_df, colour = group_name,
+        frame = F, shape = plot_options[1], label = plot_options[2])
+    }
+}else{
+    if(!circles_boolean){
+        plot_out <- autoplot(prcomp(plot_mat), data = plot_df, frame = F, shape = plot_options[1], label = plot_options[2])
+    }else{
+        plot_out <- autoplot(prcomp(plot_mat), data = plot_df, frame = F, shape = plot_options[1], label = plot_options[2])
+    }
+}
+
+## add advanced plotting options for final plot
+plot_out <- plot_out +
+    scale_color_manual(values=default_ggplot_colors) +
+    scale_fill_manual(values=default_ggplot_colors) +
+    gg_theme +
+    gg_legend +
+    ggtitle('$title') +
+    theme(plot.title = element_text(hjust = 0.5))
+
+@SAVE_OUTPUT@
+        ]]></configfile>
+    </configfiles>
+    <inputs>
+        <param name="input1" type="data" format="tabular" label="Select table"/>
+        <conditional name="inputdata">
+            <param name="input_type" type="select" label="Select input dataset options" help="specific dataset input for reading">
+                <option value="with_header" selected="true">Dataset with header</option>
+                <option value="with_rownames">Dataset with row names</option>
+                <option value="with_header_rownames">Dataset with header and row names</option>
+                <option value="no_header_rownames">Dataset without header or row names</option>
+            </param>
+            <when value="with_header">
+                <param name="header" type="hidden" value="TRUE"/>
+                <param name="row_names_index" type="hidden" value="0"/>
+                <param name="sample_name_orientation" type="select" display="radio" multiple="false" label="Sample names orientation" help="Default horizontal: header names are interpreted as sample names">
+                    <option value="TRUE" selected="true">horizontal</option>
+                    <option value="FALSE">vertial</option>
+                </param>
+            </when>
+            <when value="with_rownames">
+                <param name="header" type="hidden" value="FALSE"/>
+                <param name="row_names_index" type="data_column" data_ref="input1" label="Select column, for row names" help="WARNING: please consider that using row names might shift the grouping columns"/>
+                <param name="sample_name_orientation" type="select" display="radio" label="Sample names orientation" help="default vertial: row names are interpreted as sample names">
+                    <option value="TRUE">horizontal</option>
+                    <option value="FALSE" selected="true">vertial</option>
+                </param>
+            </when>
+            <when value="with_header_rownames">
+                <param name="header" type="hidden" value="TRUE"/>
+                <param name="row_names_index" label="Select column, for row names" type="data_column" data_ref="input1" help="WARNING: please consider that using row names might shift the grouping columns"/>
+                <param name="sample_name_orientation" type="select" label="Sample names orientation" display="radio" multiple="false" help="deside whether header names or row names are interpreted as sample names">
+                    <option value="TRUE" selected="true">horizontal</option>
+                    <option value="FALSE">vertial</option>
+                </param>
+            </when>
+            <when value="no_header_rownames">
+                <param name="header" type="hidden" value="FALSE"/>
+                <param name="row_names_index" type="hidden" value="0"/>
+                <param name="sample_name_orientation" type="hidden" value="TRUE"/>
+            </when>
+        </conditional>
+        <expand macro="title"/>
+        <conditional name="groups">
+            <param name="group_type" type="select" label="Select groups">
+                <option value="no_groups" selected="true">No groups</option>
+                <option value="define_groups">Define groups</option>
+            </param>
+            <when value="no_groups">
+                <param name="circle" type="hidden" value="no"/>
+            </when>
+            <when value="define_groups">
+                <repeat name="group_names" min="2" title="Group" help="Select the samples for this group">
+                    <param name="groupName" type="text" optional="false" label="Group name"
+                        help="Use short names, avoid special characters and numbers at the beginning of the name (The names might be changed by the program to make them conform to processing in R)">
+                        <validator type="no_options" message="Please choose a name for this group!"/>
+                    </param>
+                    <param name="groupCols" type="data_column" data_ref="input1" multiple="true" min="1" label="Columns for group"
+                        help="WARNING: please use columns indices after removing the row name column if selected in second section!">
+                        <validator type="no_options" message="Select at least one column for each group!"/>
+                        <!--<filter type="remove_value" meta_ref="groupCols" />-->
+                    </param>
+                    <conditional name="color_cond">
+                        <param name="color_bool" type="select" label="Change colors">
+                            <option value="default" selected="true">Default ggplot colors</option>
+                            <option value="selected_colors">Select colors</option>
+                        </param>
+                        <when value="selected_colors">
+                            <param name="plot_color" type="color" value="" label="Pick color">
+                                 <sanitizer sanitize="false"/>
+                            </param>
+                        </when>
+                        <when value="default">
+                            <param name="plot_color" type="hidden" value="none"/>
+                        </when>
+                    </conditional>
+                </repeat>
+                <param name="circle" type="select" display="radio" multiple="false" label="Select type of ellipses">
+                    <option value="no">no ellipes</option>
+                    <option value="convex">convex</option>
+                    <option value="t" selected="true">t-distribution</option>
+                    <option value="norm">normal distribution</option>
+                    <option value="euclid">euclidean distance</option>
+                </param>
+            </when>
+        </conditional>
+        <param name="plotoptions" type="select" label="Select plot layout" display="radio" >
+            <option value="shape" >show shapes</option>
+            <option value="label" selected="true">show labels (group elements)</option>
+            <option value="shape,label" >show shapes and labels</option>
+        </param>
+        <!-- Advanced Options  -->
+        <section name="adv" title="Advanced Options" expanded="false">
+            <expand macro="transform"/>
+            <expand macro="xy_scaling" />
+            <expand macro="theme"/>
+            <expand macro="legend"/>
+        </section>
+        <!-- Output Options  -->
+        <section name="out" title="Output Options" expanded="true">
+            <expand macro="dimensions" />
+        </section>
+    </inputs>
+    <outputs>
+        <expand macro="additional_output" />
+    </outputs>
+    <tests>
+        <test>
+            <param name="input1" value="mtcars.txt" ftype="tabular"/>
+            <conditional name="inputdata">
+                <param name="input_type" value="with_header_rownames"/>
+                <param name="header" value="TRUE"/>
+                <param name="row_names_index" value="1"/>
+                <param name="sample_name_orientation" value="TRUE"/>
+            </conditional>
+            <conditional name="groups">
+                <param name="group_type" value="define_groups"/>
+                <repeat name="group_names">
+                    <param name="groupName" value="group1"/>
+                    <param name="groupCols" value="3,4"/>
+                    <conditional name="color_cond">
+                        <param name="color_bool" value="default"/>
+                        <param name="plot_color" value="none"/>
+                    </conditional>
+                </repeat>
+                <repeat name="group_names">
+                    <param name="groupName" value="group2"/>
+                    <param name="groupCols" value="2,5,6,8,9,10,11"/>
+                    <conditional name="color_cond">
+                        <param name="color_bool" value="default"/>
+                        <param name="plot_color" value="none"/>
+                    </conditional>
+                </repeat>
+                <param name="circle" value="convex"/>
+            </conditional>
+            <param name="additional_output_format" value="pdf"/>
+            <output name="output2" file="ggplot_pca_result1.pdf" compare="sim_size"/>
+        </test>
+    </tests>
+    <help><![CDATA[
+**What it does**
+
+This tool generates a Principal component analysis (PCA) for a given table using a combination of ggplot2 and ggfortify.
+
+-----
+
+**Example**
+
+**WARNING:** Be carefull when selecting row names in the second option because the grouping elements do not update automaticly before executing the script. This means that columns have to be chosen as if the row name column was already be removed.
+
+**Example for row names in table**
+
++--------+-----------+-----------+---------------+---------------+
+| name   | control 1 | control 2 |  treatment 1  |  treatment 2  |
++========+===========+===========+===============+===============+
+| gene 1 |   10      |     12    |       3455    |        232    |
++--------+-----------+-----------+---------------+---------------+
+| gene 2 |      20   |     2     |       345     |        334    |
++--------+-----------+-----------+---------------+---------------+
+| gene 3 |      200  |     210   |       20      |        2      |
++--------+-----------+-----------+---------------+---------------+
+|        |           |           |               |               |
++--------+-----------+-----------+---------------+---------------+
+|   1    |       2   |      3    |      4        |       5       |
++--------+-----------+-----------+---------------+---------------+
+
+The new index after reading the table will be:
+
++--------+-----------+-----------+--------------+---------------+
+| name   | control 1 | control 2 | treatment 1  |  treatment 2  |
++========+===========+===========+==============+===============+
+|*       |      1    |     2     |      3       |      4        |
++--------+-----------+-----------+--------------+---------------+
+
+-----
+
+Pictures coming soon.
+    ]]></help>
+    <expand macro="citations">
+        <citation type="bibtex">@article{tang2016ggfortify,
+            title={ggfortify: unified interface to visualize statistical results of popular R packages},
+            author={Tang, Yuan and Horikoshi, Masaaki and Li, Wenxuan},
+            journal={The R Journal},
+            volume={8},
+            number={2},
+            pages={478-489},
+            year={2016},
+            url = {https://journal.r-project.org/archive/2016/RJ-2016-060/RJ-2016-060.pdf}
+            }
+        </citation>
+        <citation type="bibtex">@manual{gu2016getoptlong,
+            title = {GetoptLong: Parsing Command-Line Arguments and Variable Interpolation},
+            author = {Zuguang Gu},
+            year = {2016},
+            note = {R package version 0.1.5},
+            url = {https://CRAN.R-project.org/package=GetoptLong},
+            }
+        </citation>
+    </expand>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/macros.xml	Mon Jun 11 16:05:29 2018 -0400
@@ -0,0 +1,291 @@
+<?xml version="1.0"?>
+<macros>
+    <xml name="requirements">
+        <requirements>
+            <requirement type="package" version="@VERSION@">r-ggplot2</requirement>
+            <yield />
+        </requirements>
+    </xml>
+    <token name="@VERSION@">2.2.1</token>
+
+    <token name="@R_INIT@"><![CDATA[
+        ## Setup R error handling to go to stderr
+        options(show.error.messages=F, error=function(){cat(geterrmessage(), file=stderr()); q("no",1,F)})
+
+        ## Unify locale settings
+        loc <- Sys.setlocale("LC_MESSAGES", "en_US.UTF-8")
+    ]]></token>
+
+    <token name="@TRANSFORM@"><![CDATA[
+        #if $adv.transform == "log2"
+            input["value"] <- log2(input["value"])
+        #elif $adv.transform == "log2plus1"
+            input["value"] <- log2(input["value"]+1)
+        #elif $adv.transform == "log10"
+            input["value"] <- log10(input["value"])
+        #elif $adv.transform == "log10plus1"
+            input["value"] <- log10(input["value"]+1)
+        #end if
+    ]]></token>
+
+    <token name="@XY_SCALING@"><![CDATA[
+        #Choose between automatically scaled x and y axis or user defined
+        #if $adv.scaling.plot_scaling == "Automatic"
+            gg_scalex = NULL
+            gg_scaley = NULL
+        #else
+            gg_scalex = xlim($adv.scaling.xaxismin, $adv.scaling.xaxismax)
+            gg_scaley = ylim($adv.scaling.yaxismin, $adv.scaling.yaxismax)
+            cat("\n xaxismin: ", $adv.scaling.xaxismin)
+            cat("\n xaxismax: ", $adv.scaling.xaxismax)
+            cat("\n yaxismin: ", $adv.scaling.yaxismin)
+            cat("\n yaxismax: ", $adv.scaling.yaxismax)
+        #end if
+    ]]></token>
+
+    <token name="@THEME@"><![CDATA[
+        ## Choose theme for plot
+        #if $adv.theme == "bw"
+            gg_theme = theme_bw()
+        #else
+            gg_theme = NULL
+        #end if
+    ]]></token>
+
+    <token name="@LEGEND@"><![CDATA[
+        ## Show/hide legend
+        #if $adv.legend == "yes"
+            gg_legend = theme(legend.position="right")
+        #else
+            gg_legend = theme(legend.position="none")
+            cat("\n no legend")
+        #end if
+    ]]></token>
+    <token name="@SAVE_OUTPUT@"><![CDATA[
+        ## output options need to be in out section
+        gg_width <- as.double('$out.width_output_dim')
+        gg_height <- as.double('$out.height_output_dim')
+        gg_unit <- '$out.unit_output_dim'
+        gg_dpi <- as.double('$out.dpi_output_dim')
+        gg_add_device <- '$out.additional_output_format'
+        output1 <- '$output1'
+        output2 <- '$output2'
+
+        ## ggsave to png
+        ggsave(filename = output1, plot = plot_out, width = gg_width, height = gg_height, units = gg_unit, dpi = gg_dpi, device = "png")
+        if(gg_add_device != "none"){
+          ggsave(filename = output2, plot = plot_out, width = gg_width, height = gg_height, units = gg_unit, dpi = gg_dpi, device = gg_add_device)
+        }
+    ]]></token>
+    <xml name="read_complex_input">
+        <param name="input1" type="data" format="tabular" label="Select table"/>
+        <conditional name="inputdata">
+            <param name="input_type" type="select" label="Select input dataset options" help="specific dataset input for reading">
+                <option value="with_header" selected="true">Dataset with header</option>
+                <option value="with_rownames">Dataset with row names</option>
+                <option value="with_header_rownames">Dataset with header and row names</option>
+                <option value="no_header_rownames">Dataset without header or row names</option>
+            </param>
+            <when value="with_header">
+                <param name="header" type="hidden" value="TRUE"/>
+                <param name="row_names_index" type="hidden" value="0"/>
+                <param name="sample_name_orientation" type="select" display="radio" multiple="false" label="Sample names orientation" help="Default horizontal: header names are interpreted as sample names">
+                    <option value="TRUE" selected="true">horizontal</option>
+                    <option value="FALSE">vertial</option>
+                </param>
+            </when>
+            <when value="with_rownames">
+                <param name="header" type="hidden" value="FALSE"/>
+                <param name="row_names_index" type="data_column" data_ref="input1" label="Select column, for row names" help="WARNING: please consider that using row names might shift the grouping columns"/>
+                <param name="sample_name_orientation" type="select" display="radio" label="Sample names orientation" help="default vertial: row names are interpreted as sample names">
+                    <option value="TRUE">horizontal</option>
+                    <option value="FALSE" selected="true">vertial</option>
+                </param>
+            </when>
+            <when value="with_header_rownames">
+                <param name="header" type="hidden" value="TRUE"/>
+                <param name="row_names_index" type="data_column" data_ref="input1" label="Select column, for row names" help="WARNING: please consider that using row names might shift the grouping columns"/>
+                <param name="sample_name_orientation" type="select" label="Sample names orientation" display="radio" multiple="false" help="deside whether header names or row names are interpreted as sample names">
+                    <option value="TRUE" selected="true">horizontal</option>
+                    <option value="FALSE">vertial</option>
+                </param>
+            </when>
+            <when value="no_header_rownames">
+                <param name="header" type="hidden" value="FALSE"/>
+                <param name="row_names_index" type="hidden" value="0"/>
+                <param name="sample_name_orientation" type="hidden" value="TRUE"/>
+            </when>
+        </conditional>
+    </xml>
+    <xml name="transform">
+        <param name="transform" type="select" label="Data transformation">
+            <option value="none">Plot the data as it is</option>
+            <option value="log2">Log2(value) transform my data</option>
+            <option value="log2plus1">Log2(value+1) transform my data</option>
+            <option value="log10">Log10(value) transform my data</option>
+            <option value="log10plus1">Log10(value+1) transform my data</option>
+        </param>
+    </xml>
+    <xml name="xy_scaling">
+        <conditional name="scaling">
+            <param name="plot_scaling" type="select" label="Axis scaling">
+                <option value="Automatic" selected="true">Automatic axis scaling</option>
+                <option value="Defined">User-defined axis scales</option>
+            </param>
+            <when value="Automatic">
+                <!--Do nothing here -->
+            </when>
+            <when value="Defined">
+                <param name="xaxismin" type="integer" value="0" label="minimal range of x-axis" />
+                <param name="xaxismax" type="integer" value="3" label="maximal range of x-axis" />
+                <param name="yaxismin" type="integer" value="0" label="minimal range of y-axis" />
+                <param name="yaxismax" type="integer" value="3" label="maximal range of y-axis" />
+            </when>
+        </conditional>
+    </xml>
+    <xml name="title">
+       <param name="title" type="text" value="" label="Plot title">
+            <!--<sanitizer sanitize="false"/> -->
+        </param>
+    </xml>
+    <xml name="xy_lab">
+        <param name="xlab" type="text" value="title of x-axis" label="Label for x axis">
+            <sanitizer sanitize="false"/>
+        </param>
+        <param name="ylab" type="text" value="title of y-axis" label="Label for y axis">
+            <sanitizer sanitize="false"/>
+        </param>
+    </xml>
+    <xml name="legend">
+        <param name="legend" type="select" label="Legend options">
+            <option value="yes">Include legend on plot</option>
+            <option value="no">Hide legend</option>
+        </param>
+    </xml>
+    <xml name="theme">
+        <param name="theme" type="select" label="Backgound theme for plot">
+            <option value="bw">Black and white</option>
+            <option value="Default">Default (grey)</option>
+        </param>
+    </xml>
+    <xml name="dimensions">
+        <param name="unit_output_dim" type="select" label="Unit of output dimensions" help="default inches">
+            <option value="in" selected="true">Inches (in)</option>
+            <option value="cm">Centimeters (cm)</option>
+            <option value="mm">Millimeters (mm)</option>
+        </param>
+        <param name="width_output_dim" type="float" value="7" label="width of output"/>
+        <param name="height_output_dim" type="float" value="7" label="height of output"/>
+        <param name="dpi_output_dim" type="float" value="300" label="dpi of output" help="Plot resolution. Applies only to raster output types."/>
+        <param name="additional_output_format" type="select" label="Additional output format" help="PNG is always selected as output format">
+            <option value="none" selected="true">only PNG</option>
+            <option value="pdf">PDF</option>
+            <option value="svg">SVG</option>
+            <option value="eps">EPS</option>
+            <option value="ps">PS</option>
+            <option value="tex">TEX (pictex)</option>
+            <option value="jpeg">JPEG</option>
+            <option value="tiff">TIFF</option>
+            <option value="bmp">BMP</option>
+        </param>
+    </xml>
+    <xml name="citations">
+        <citations>
+            <citation type="bibtex">@book{wickham2009ggplot2,
+                author = {Hadley Wickham},
+                title = {ggplot2: Elegant Graphics for Data Analysis},
+                publisher = {Springer-Verlag New York},
+                year = {2009},
+                isbn = {978-0-387-98140-6},
+                url = {http://ggplot2.org},
+                }
+            </citation>
+            <yield />
+        </citations>
+    </xml>
+    <xml name="axis_customization" token_label="Axis title options">
+        <param name="axis_customization" type="select" label="@LABEL@">
+            <option value="default" selected="true">Default</option>
+            <option value="defined">User defined label options</option>
+        </param>
+        <when value="default">
+            <!--Do nothing here -->
+        </when>
+        <when value="defined">
+            <param name="size" type="float" value="12" label="Axis label size (default = 12)"/>
+            <param name="color" type="select" label="Color of axis label">
+                <option value="black">Black (default)</option>
+                <option value="red">Red</option>
+                <option value="white">White</option>
+                <option value="blue">Blue</option>
+                <option value="orange">Orange</option>
+                <option value="yellow">Yellow</option>
+                <option value="green">Green</option>
+                <option value="purple">Purple</option>
+                <option value="magenta">Magenta</option>
+                <option value="cyan">Cyan</option>
+                <option value="grey">Grey</option>
+                <option value="gold">Gold</option>
+            </param>
+            <param name="face" type="select" label="Font effect of axis label">
+                <option value="plain">Normal (default)</option>
+                <option value="bold">Bold</option>
+                <option value="italic">Italic</option>
+            </param>
+        </when>
+    </xml>
+    <xml name="colors">
+        <param name="colors" type="select" label="Color schemes to differentiate your groups" >
+            <option value="Default">Default color scheme</option>
+            <option value="YlOrRd">Yellow to orange to red (discrete, max=9 colors)</option>
+            <option value="YlOrBr">Yellow to orange to brown (discrete, max=9 colors)</option>
+            <option value="YlGnBu">Yellow to green to blue (discrete, max=9 colors)</option>
+            <option value="YlGn">Yellow to green (discrete, max=9 colors)</option>
+            <option value="Reds">Shades of red from light to dark (discrete, max=9 colors)</option>
+            <option value="RdPu">Red to purple (discrete, max=9 colors)</option>
+            <option value="Purples">Shades of purple from light to dark (discrete, max=9 colors)</option>
+            <option value="PuRd">Purple to red (discrete, max=9 colors)</option>
+            <option value="PuBuGn">Purple to blue to green (discrete, max=9 colors)</option>
+            <option value="PuBu">Purple to blue(discrete, max=9 colors)</option>
+            <option value="OrRd">Orange to red (discrete, max=9 colors)</option>
+            <option value="Oranges">Shades of orange from light to dark (discrete, max=9 colors)</option>
+            <option value="Greys">Shades of grey from light to dark (discrete, max=9 colors)</option>
+            <option value="Greens">Shades of greens from light to dark (discrete, max=9 colors)</option>
+            <option value="GnBu">Green to blue (discrete, max=9 colors)</option>
+            <option value="BuPu">Blue to purple (discrete, max=9 colors)</option>
+            <option value="BuGn">Blue to green (discrete, max=9 colors)</option>
+            <option value="Blues">Shades of blue from light to dark (discrete, max=9 colors)</option>
+            <option value="Set1">Set 1 - predefined color pallete (discrete, max=9 colors)</option>
+            <option value="Set2">Set 2 - predefined color pallete (discrete, max=8 colors)</option>
+            <option value="Set3">Set 3 - predefined color pallete (discrete, max=12 colors)</option>
+            <option value="Pastel1">Pastel 1 - predefined pastel color pallete (discrete, max=9 colors)</option>
+            <option value="Pastel2">Pastel 2 - predefined pastel color pallete (discrete, max=8 colors)</option>
+            <option value="Paired">Paired - predefined color pallete (discrete, max=12 colors)</option>
+            <option value="Dark2">Dark 2 - predefined color pallete (discrete, max=12 colors)</option>
+            <option value="Accent">Accent - predefined color pallete (discrete, max=12 colors)</option>
+            <option value="Spectral">Spectral - Red to yellow to purple (discrete, max=11 colors)</option>
+            <option value="RdYlGn">Red to yellow to green (discrete, max=11 colors)</option>
+            <option value="RdYlBu">Red to yellow to blue (discrete, max=11 colors)</option>
+            <option value="RdGy">Red to grey (discrete, max=11 colors)</option>
+            <option value="RdBu">Red to blue (discrete, max=11 colors)</option>
+            <option value="PuOr">Purple to orange (discrete, max=11 colors)</option>
+            <option value="PRGn">Purple to green (discrete, max=11 colors)</option>
+            <option value="BrBG">Brown to teal (discrete, max=11 colors)</option>
+        </param>
+    </xml>
+    <xml name="additional_output">
+        <data name="output1" format="png" label="${tool.name} on ${on_string}: png"/>
+        <data format="pdf" name="output2" label="${tool.name} on ${on_string}: ${out.additional_output_format}">
+            <change_format>
+                <when input="out.additional_output_format" value="svg" format="svg" />
+                <when input="out.additional_output_format" value="eps" format="eps" />
+                <when input="out.additional_output_format" value="ps" format="ps" />
+                <when input="out.additional_output_format" value="tex" format="txt" />
+                <when input="out.additional_output_format" value="jpeg" format="jpg" />
+                <when input="out.additional_output_format" value="tiff" format="tiff" />
+                <when input="out.additional_output_format" value="bmp" format="bmp" />
+            </change_format>
+            <filter>out['additional_output_format'] != "none"</filter>
+        </data>
+    </xml>
+</macros>
Binary file test-data/ggplot_heatmap2_result1.pdf has changed
Binary file test-data/ggplot_heatmap_result1.pdf has changed
Binary file test-data/ggplot_histogram_result1.pdf has changed
Binary file test-data/ggplot_pca_result1.pdf has changed
Binary file test-data/ggplot_point_result1.pdf has changed
Binary file test-data/ggplot_violin_result1.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test-data/mtcars.txt	Mon Jun 11 16:05:29 2018 -0400
@@ -0,0 +1,33 @@
+brand	mpg	cyl	disp	hp	drat	wt	qsec	vs	am	gear	carb
+Mazda RX4	21	6	160	110	3.9	2.62	16.46	0	1	4	4
+Mazda RX4 Wag	21	6	160	110	3.9	2.875	17.02	0	1	4	4
+Datsun 710	22.8	4	108	93	3.85	2.32	18.61	1	1	4	1
+Hornet 4 Drive	21.4	6	258	110	3.08	3.215	19.44	1	0	3	1
+Hornet Sportabout	18.7	8	360	175	3.15	3.44	17.02	0	0	3	2
+Valiant	18.1	6	225	105	2.76	3.46	20.22	1	0	3	1
+Duster 360	14.3	8	360	245	3.21	3.57	15.84	0	0	3	4
+Merc 240D	24.4	4	146.7	62	3.69	3.19	20	1	0	4	2
+Merc 230	22.8	4	140.8	95	3.92	3.15	22.9	1	0	4	2
+Merc 280	19.2	6	167.6	123	3.92	3.44	18.3	1	0	4	4
+Merc 280C	17.8	6	167.6	123	3.92	3.44	18.9	1	0	4	4
+Merc 450SE	16.4	8	275.8	180	3.07	4.07	17.4	0	0	3	3
+Merc 450SL	17.3	8	275.8	180	3.07	3.73	17.6	0	0	3	3
+Merc 450SLC	15.2	8	275.8	180	3.07	3.78	18	0	0	3	3
+Cadillac Fleetwood	10.4	8	472	205	2.93	5.25	17.98	0	0	3	4
+Lincoln Continental	10.4	8	460	215	3	5.424	17.82	0	0	3	4
+Chrysler Imperial	14.7	8	440	230	3.23	5.345	17.42	0	0	3	4
+Fiat 128	32.4	4	78.7	66	4.08	2.2	19.47	1	1	4	1
+Honda Civic	30.4	4	75.7	52	4.93	1.615	18.52	1	1	4	2
+Toyota Corolla	33.9	4	71.1	65	4.22	1.835	19.9	1	1	4	1
+Toyota Corona	21.5	4	120.1	97	3.7	2.465	20.01	1	0	3	1
+Dodge Challenger	15.5	8	318	150	2.76	3.52	16.87	0	0	3	2
+AMC Javelin	15.2	8	304	150	3.15	3.435	17.3	0	0	3	2
+Camaro Z28	13.3	8	350	245	3.73	3.84	15.41	0	0	3	4
+Pontiac Firebird	19.2	8	400	175	3.08	3.845	17.05	0	0	3	2
+Fiat X1-9	27.3	4	79	66	4.08	1.935	18.9	1	1	4	1
+Porsche 914-2	26	4	120.3	91	4.43	2.14	16.7	0	1	5	2
+Lotus Europa	30.4	4	95.1	113	3.77	1.513	16.9	1	1	5	2
+Ford Pantera L	15.8	8	351	264	4.22	3.17	14.5	0	1	5	4
+Ferrari Dino	19.7	6	145	175	3.62	2.77	15.5	0	1	5	6
+Maserati Bora	15	8	301	335	3.54	3.57	14.6	0	1	5	8
+Volvo 142E	21.4	4	121	109	4.11	2.78	18.6	1	1	4	2