diff plot.xml @ 1:e4c0f5ee8e17 draft

"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/scanpy/ commit 8ef5f7c6f8728608a3f05bb51e11b642b84a05f5"
author iuc
date Wed, 16 Oct 2019 06:28:57 -0400
parents 397d2c97af05
children 4bfb75bb7c8e
line wrap: on
line diff
--- a/plot.xml	Mon Mar 04 10:14:25 2019 -0500
+++ b/plot.xml	Wed Oct 16 06:28:57 2019 -0400
@@ -1,5 +1,5 @@
-<tool id="scanpy_plot" name="Plot with scanpy" version="@galaxy_version@">
-    <description></description>
+<tool id="scanpy_plot" name="Plot" version="@galaxy_version@">
+    <description> with scanpy</description>
     <macros>
         <import>macros.xml</import>
     </macros>
@@ -25,14 +25,14 @@
     #if $method.type.type == 'xy'
     x='$method.type.x',
     y='$method.type.y',
-    layers=('$method.type.layer_x', '$method.type.layer_y', '$method.type.layer_color'),
+        #if str('$method.type.layers.use_layers') == 'true'
+    layers=('$method.type.layers.layer_x', '$method.type.layers.layer_y', '$method.type.layers.layer_color'),
+        #end if
     #else
     basis='$method.type.basis',
         #if str($method.type.color) != ''
             #set $color = ([x.strip() for x in str($method.type.color).split(',')])
     color=$color,
-        #else
-    color=None,
         #end if
     #end if
     use_raw=$method.use_raw,
@@ -51,14 +51,16 @@
     #end if
     size=$method.plot.size)
 
-#elif $method.method == 'pl.heatmap'
+#else if $method.method == 'pl.heatmap'
 sc.pl.heatmap(
     @CMD_param_plot_inputs@
     @CMD_params_plots@
     swap_axes=$method.swap_axes,
     show_gene_labels=$method.show_gene_labels,
     cmap='$method.matplotlib_pyplot_imshow.cmap',
+    #if str($method.matplotlib_pyplot_imshow.interpolation) != 'None'
     interpolation='$method.matplotlib_pyplot_imshow.interpolation',
+    #end if
     #if $method.matplotlib_pyplot_imshow.alpha
     alpha=$method.matplotlib_pyplot_imshow.alpha,
     #end if
@@ -70,7 +72,7 @@
     #end if
     origin='$method.matplotlib_pyplot_imshow.origin')
 
-#elif $method.method == 'pl.dotplot'
+#else if $method.method == 'pl.dotplot'
 sc.pl.dotplot(
     @CMD_param_plot_inputs@
     @CMD_params_plots@
@@ -83,14 +85,14 @@
     #end if
     @CMD_params_matplotlib_pyplot_scatter@)
 
-#elif $method.method == 'pl.violin'
+#else if $method.method == 'pl.violin'
 sc.pl.violin(
     @CMD_param_plot_inputs@
     #if $method.key_variables.type == "var_names"
         #set $key_list = adata.var_names
-    #elif $method.key_variables.type == "obs"
+    #else if $method.key_variables.type == "obs"
         #set $key_list = adata.obs.select_dtypes(exclude=['category']).columns
-    #elif $method.key_variables.type == "custom"
+    #else if $method.key_variables.type == "custom"
         #set $key_list=([x.strip() for x in str($method.key_variables.keys).split(',')])
     #end if
     keys=$key_list,
@@ -99,14 +101,11 @@
     #end if
     log=$method.log,
     use_raw=$method.use_raw,
-    sstripplot=$method.violin_plot.stripplot.stripplot,
-    #if $method.violin_plot.stripplot.stripplot == "True"
-    jitter=$method.violin_plot.stripplot.jitter.jitter,
-        #if $method.violin_plot.stripplot.jitter.jitter == "True"
-    size=$method.violin_plot.stripplot.jitter.size,
-        #end if
+    @CMD_conditional_stripplot@
+    multi_panel=$method.violin_plot.multi_panel.multi_panel, 
+    #if $method.violin_plot.multi_panel.multi_panel == "True" and str($method.violin_plot.multi_panel.width) != '' and str($method.violin_plot.multi_panel.height) != ''
+    figsize=($method.violin_plot.multi_panel.width, $method.violin_plot.multi_panel.height),
     #end if
-    multi_panel=$method.violin_plot.multi_panel.multi_panel, 
     scale='$method.violin_plot.scale',
     #if $method.xlabel
     xlabel='$method.xlabel',
@@ -116,7 +115,20 @@
     #end if
     @CMD_params_seaborn_violinplot@)
 
-#elif $method.method == 'pl.matrixplot'
+#else if $method.method == 'pl.stacked_violin'
+sc.pl.stacked_violin(
+    @CMD_param_plot_inputs@
+    @CMD_params_plots@
+    swap_axes=$method.swap_axes,
+    @CMD_conditional_stripplot@
+    scale='$method.violin_plot.scale',
+    row_palette='$method.row_palette',
+    #if str($method.standard_scale) != 'None'
+    standard_scale='$method.standard_scale',
+    #end if
+    @CMD_params_seaborn_violinplot@)
+
+#else if $method.method == 'pl.matrixplot'
 sc.pl.matrixplot(
     @CMD_param_plot_inputs@
     @CMD_params_plots@
@@ -134,7 +146,7 @@
     #end if
     snap=$method.matplotlib_pyplot_pcolor.snap)
 
-#elif $method.method == 'pl.clustermap'
+#else if $method.method == 'pl.clustermap'
 sc.pl.clustermap(
     #if str($method.use_raw) == 'True'
     adata=adata.X,
@@ -142,24 +154,22 @@
     adata=adata,
     #end if
     show=False,
+    #if str($method.obs_keys) != ''
     obs_keys='$method.obs_keys',
+    #end if
     use_raw=$method.use_raw,
     method='$method.seaborn_clustermap.method',
     metric='$method.seaborn_clustermap.metric',
-    #if str($method.seaborn_clustermap.z_score) == 'None'
-    z_score=None,
-    #else
+    #if str($method.seaborn_clustermap.z_score) != 'None'
     z_score=$method.seaborn_clustermap.z_score,
     #end if
-    #if str($method.seaborn_clustermap.standard_scale) == 'None'
-    standard_scale=None,
-    #else
+    #if str($method.seaborn_clustermap.standard_scale) != 'None'
     standard_scale=$method.seaborn_clustermap.standard_scale,
     #end if
     col_cluster=$method.seaborn_clustermap.col_cluster,
     row_cluster=$method.seaborn_clustermap.row_cluster).savefig(fname="output.$format")
 
-#elif $method.method == 'pl.highest_expr_genes'
+#else if $method.method == 'pl.highest_expr_genes'
 sc.pl.highest_expr_genes(
     @CMD_param_plot_inputs@
     n_top=$method.n_top,
@@ -174,7 +184,16 @@
     #end if
     saturation=$method.setseaborn_boxplot.saturation)
 
-#elif $method.method == 'pl.pca'
+#else if $method.method == 'pl.highly_variable_genes'
+sc.pl.highly_variable_genes(
+    adata_or_result=adata,
+    log=$method.log,
+    save='.$format',
+    show=False,
+    highly_variable_genes=$method.highly_variable_genes
+    )
+
+#else if $method.method == 'pl.pca'
 sc.pl.pca(
     @CMD_param_plot_inputs@
     @CMD_param_color@
@@ -185,19 +204,19 @@
     @CMD_pl_attribute_section@
     @CMD_params_matplotlib_pyplot_scatter@)
 
-#elif $method.method == 'pl.pca_loadings'
+#else if $method.method == 'pl.pca_loadings'
 sc.pl.pca_loadings(
     @CMD_param_plot_inputs@
     #set $components = ([int(x.strip()) for x in str($method.components).split(',')])
     components=$components)
 
-#elif $method.method == 'pl.pca_variance_ratio'
+#else if $method.method == 'pl.pca_variance_ratio'
 sc.pl.pca_variance_ratio(
     @CMD_param_plot_inputs@
     n_pcs=$method.n_pcs,
     log=$method.log)
 
-#elif $method.method == 'pl.pca_overview'
+#else if $method.method == 'pl.pca_overview'
 sc.pl.pca_overview(
     @CMD_param_plot_inputs@
     @CMD_param_color@
@@ -208,7 +227,7 @@
     @CMD_pl_attribute_section@
     @CMD_params_matplotlib_pyplot_scatter@)
 
-#elif $method.method == 'pl.tsne'
+#else if $method.method == 'pl.tsne'
 sc.pl.tsne(
     @CMD_param_plot_inputs@
     @CMD_param_color@
@@ -221,7 +240,7 @@
     @CMD_pl_attribute_section@
     @CMD_params_matplotlib_pyplot_scatter@)
 
-#elif $method.method == 'pl.umap'
+#else if $method.method == 'pl.umap'
 sc.pl.umap(
     @CMD_param_plot_inputs@
     @CMD_param_color@
@@ -234,7 +253,7 @@
     @CMD_pl_attribute_section@
     @CMD_params_matplotlib_pyplot_scatter@)
 
-#elif $method.method == 'pl.diffmap'
+#else if $method.method == 'pl.diffmap'
 sc.pl.diffmap(
     @CMD_param_plot_inputs@
     @CMD_param_color@
@@ -245,12 +264,35 @@
     @CMD_pl_attribute_section@
     @CMD_params_matplotlib_pyplot_scatter@)
 
-#elif $method.method == 'pl.dpt_groups_pseudotime'
+#else if $method.method == 'pl.draw_graph'
+sc.pl.draw_graph(
+    @CMD_param_plot_inputs@
+    @CMD_param_color@
+    #if str($method.gene_symbols) != ''
+    gene_symbols='$method.gene_symbols',
+    #end if
+    use_raw=$method.use_raw,
+    #if str($method.layout) != 'None'
+    layout='$method.layout',
+    #end if
+    edges=$method.edges.edges,
+    #if str($method.edges.edges) == 'True'
+    edges_width=$method.edges.edges_width,
+    edges_color='$method.edges.edges_color',
+    #end if
+    arrows=$method.arrows,
+    sort_order=$method.sort_order,
+    @CMD_params_pl_groups@
+    @CMD_params_pl_components@
+    @CMD_pl_attribute_section@
+    @CMD_params_matplotlib_pyplot_scatter@)
+
+#else if $method.method == 'pl.dpt_groups_pseudotime'
 sc.pl.dpt_groups_pseudotime(
     @CMD_param_plot_inputs@
     color_map='$method.color_map')
 
-#elif $method.method == 'pl.dpt_timeseries'
+#else if $method.method == 'pl.dpt_timeseries'
 sc.pl.dpt_timeseries(
     @CMD_param_plot_inputs@
     #if $method.heatmap.as_heatmap == "True"
@@ -258,10 +300,73 @@
     #end if
     as_heatmap=$method.heatmap.as_heatmap)
 
-#elif $method.method == 'pl.paga'
+#else if $method.method == 'pl.paga'
 sc.pl.paga(
     @CMD_param_plot_inputs@
     @CMD_params_pl_paga@)
+
+#else if $method.method == 'pl.paga_compare'
+sc.pl.paga_compare(
+    @CMD_param_plot_inputs@
+    @CMD_params_pl_paga@)
+
+#else if $method.method == 'pl.paga_path'
+sc.pl.paga_path(
+    @CMD_param_plot_inputs@
+    #set $nodes = ([int(x.strip()) for x in str($method.nodes).split(',')])
+    nodes=$nodes,
+    #set $keys=([x.strip() for x in str($method.keys).split(',')])
+    keys=$keys,
+    use_raw=$method.use_raw,
+    #if str($method.annotations) != ''
+        #set $annotations=([x.strip() for x in str($method.annotations).split(',')])
+    annotations=$annotations,
+    #end if
+    color_map='$method.color_map',
+    n_avg=$method.n_avg,
+    #if str($method.annotations) != ''
+    groups_key='$method.groups_key',
+    #end if
+    as_heatmap=$method.as_heatmap,
+    show_node_names=$method.show_node_names,
+    show_colorbar=$method.show_colorbar,
+    show_yticks=$method.show_yticks,
+    normalize_to_zero_one=$method.normalize_to_zero_one)
+
+#else if $method.method == 'pl.rank_genes_groups'
+sc.pl.rank_genes_groups(
+    @CMD_param_plot_inputs@
+    @CMD_params_pl_groups@
+    n_genes=$method.n_genes,
+    #if str($method.gene_symbols) != ''
+    gene_symbols='$method.gene_symbols',
+    #end if
+    fontsize=$method.fontsize,
+    ncols=$method.ncols,
+    sharey=$method.sharey)
+
+#else if $method.method == 'pl.rank_genes_groups_violin'
+sc.pl.rank_genes_groups_violin(
+    @CMD_param_plot_inputs@
+    @CMD_params_pl_groups@
+    #if $method.genes.select == 'n_genes'
+    n_genes=$method.genes.n_genes,
+    #else
+        #set $gene_names = ([x.strip() for x in str($method.genes.gene_names).split(',')])
+    gene_names=$gene_names,
+    #end if
+    gene_symbols='$method.gene_symbols',
+    use_raw=$method.use_raw,
+    split=$method.split,
+    strip=$method.violin_plot.stripplot.stripplot,
+    #if $method.violin_plot.stripplot.stripplot == "True"
+    jitter=$method.violin_plot.stripplot.jitter.jitter,
+        #if $method.violin_plot.stripplot.jitter.jitter == "True"
+    size=$method.violin_plot.stripplot.jitter.size,
+        #end if
+    #end if
+    scale='$method.violin_plot.scale')
+
 #end if
 ]]></configfile>
     </configfiles>
@@ -274,13 +379,13 @@
                 <option value="pl.heatmap">Generic: Heatmap of the expression values of set of genes, using `pl.heatmap`</option>
                 <option value="pl.dotplot">Generic: Makes a dot plot of the expression values, using `pl.dotplot`</option>
                 <option value="pl.violin">Generic: Violin plot, using `pl.violin`</option>
-                <!--<option value="pl.stacked_violin">Generic: </option>!-->
+                <option value="pl.stacked_violin">Generic: Stacked violin plots, using `pl.stacked_violin`</option>
                 <option value="pl.matrixplot">Generic: Heatmap of the mean expression values per cluster, using `pl.matrixplot`</option>
                 <option value="pl.clustermap">Generic: Hierarchically-clustered heatmap, using `pl.clustermap`</option>
                 <!--<option value="pl.ranking">Generic: </option>!-->
                 <option value="pl.highest_expr_genes">Preprocessing: Plot the fraction of counts assigned to each gene over all cells, using `pl.highest_expr_genes`</option>
                 <!--<option value="pl.filter_genes_dispersion">Preprocessing: Plot dispersions versus means for genes, using `pl.filter_genes_dispersion`</option>-->
-                <!--<option value="pl.highly_variable_genes">Preprocessing: </option>!-->
+                <option value="pl.highly_variable_genes">Preprocessing: Plot dispersions versus means for genes, using `pl.highly_variable_genes`</option>
                 <!--<option value="pl.calculate_qc_metrics">Preprocessing: </option>!-->
                 <option value="pl.pca">PCA: Scatter plot in PCA coordinates, using `pl.pca`</option>
                 <option value="pl.pca_loadings">PCA: Rank genes according to contributions to PCs, using `pl.pca_loadings`</option>
@@ -289,18 +394,18 @@
                 <option value="pl.tsne">Embeddings: Scatter plot in tSNE basis, using `pl.tsne`</option>
                 <option value="pl.umap">Embeddings: Scatter plot in UMAP basis, using `pl.umap`</option>
                 <option value="pl.diffmap">Embeddings: Scatter plot in Diffusion Map basis, using `pl.diffmap`</option>
-                <!--<option value="pl.draw_graph">Embeddings: </option>!-->
+                <option value="pl.draw_graph">Embeddings: Scatter plot in graph-drawing basis, using `pl.draw_graph`</option>
                 <option value="pl.dpt_groups_pseudotime">Branching trajectories and pseudotime, clustering: Plot groups and pseudotime, using `pl.dpt_groups_pseudotime`</option>
                 <option value="pl.dpt_timeseries">Branching trajectories and pseudotime, clustering: Heatmap of pseudotime series, using `pl.dpt_timeseries`</option>
                 <option value="pl.paga">Branching trajectories and pseudotime, clustering: Plot the abstracted graph through thresholding low-connectivity edges, using `pl.paga`</option>
-                <!--<option value="pl.paga_compare">Branching trajectories and pseudotime, clustering: </option>!-->
-                <!--<option value="pl.paga_path">Branching trajectories and pseudotime, clustering: </option>!-->
-                <!--<option value="pl.rank_gene_groups">Marker genes: Plot ranking of genes using dotplot plot, using `pl.rank_gene_groups`</option>!-->
+                <option value="pl.paga_compare">Branching trajectories and pseudotime, clustering: Scatter and PAGA graph side-by-side, using `pl.paga_compare`</option>
+                <option value="pl.paga_path">Branching trajectories and pseudotime, clustering: Gene expression and annotation changes along paths, using `pl.paga_path`</option>
+                <option value="pl.rank_genes_groups">Marker genes: Plot ranking of genes using dotplot plot, using `pl.rank_genes_groups`</option>
                 <!--<option value="pl.rank_genes_groups_dotplot">Marker genes: </option>!-->
                 <!--<option value="pl.rank_genes_groups_heatmap">Marker genes: </option>!-->
                 <!--<option value="pl.rank_genes_groups_matrixplot">Marker genes: </option>!-->
                 <!--<option value="pl.rank_genes_groups_stacked_violin">Marker genes: </option>!-->
-                <!--<option value="pl.rank_genes_groups_violin">Marker genes: </option>!-->
+                <option value="pl.rank_genes_groups_violin">Marker genes: Plot ranking of genes for all tested comparisons, using `pl.rank_genes_groups_violin`</option>
                 <!--<option value="pl.phate">Misc: </option>!-->
                 <!--<option value="pl.matrix">Misc: </option>!-->
                 <!--<option value="pl.paga_adjacency">Misc: </option>!-->
@@ -317,9 +422,18 @@
                     <when value="xy">
                         <param argument="x" type="text" value="" label="x coordinate" help="Index or key from either `.obs` or `.var`"/>
                         <param argument="y" type="text" value="" label="y coordinate" help="Index or key from either `.obs` or `.var`"/>
-                        <param argument="layer_x" type="text" value="X" label="Layers for x coordinate" help="Use the `layers` attribute of `adata` if present"/>
-                        <param argument="layer_y" type="text" value="X" label="Layers for y coordinate" help="Use the `layers` attribute of `adata` if present"/>
-                        <param argument="layer_color" type="text" value="X" label="Layers for color" help="Use the `layers` attribute of `adata` if present"/>
+                        <conditional name="layers">
+                            <param argument="use_layers" type="select" label="Use the layers attribute?">
+                                <option value="true">Yes</option>
+                                <option value="false" selected="true">No</option>
+                            </param>
+                            <when value="true">
+                                <param argument="layer_x" type="text" value="" optional="true" label="Layers for x coordinate" help="Use the `layers` attribute of `adata` if present"/>
+                                <param argument="layer_y" type="text" value="" optional="true" label="Layers for y coordinate" help="Use the `layers` attribute of `adata` if present"/>
+                                <param argument="layer_color" type="text" value="" optional="true" label="Layers for color" help="Use the `layers` attribute of `adata` if present"/>
+                            </when>
+                            <when value="false"/>
+                        </conditional>
                     </when>
                     <when value="basis">
                         <param argument="basis" type="select" label="Plotting tool that computes coordinates" help="">
@@ -355,7 +469,7 @@
                 <section name="matplotlib_pyplot_imshow" title="Parameters for matplotlib.pyplot.imshow">
                     <expand macro="param_cmap"/>
                     <param name="interpolation" type="select" label="Interpolation method" help="">
-                        <option value="none">none</option>
+                        <option value="None">none</option>
                         <option value="nearest">nearest</option>
                         <option value="bilinear">bilinear</option>
                         <option value="bicubic">bicubic</option>
@@ -396,7 +510,7 @@
                     <param name="type" type="select" label="Keys for accessing variables">
                         <option value="var_names">All variables in `.var_names`</option>
                         <option value="obs">All fields in `.obs`</option>
-                        <option value="custom">Subset of variables in `adata.var_names` or fields of `.obs`"</option>
+                        <option value="custom">Subset of variables in `adata.var_names` or fields of `.obs`</option>
                     </param>
                     <when value="var_names"/>
                     <when value="obs"/>
@@ -407,11 +521,43 @@
                 <expand macro="param_groupby"/>
                 <expand macro="param_log"/>
                 <expand macro="param_use_raw"/>
-                <expand macro="section_violin_plots"/>
+                <section name="violin_plot" title="Violin plot attributes">
+                    <expand macro="conditional_stripplot"/>
+                    <conditional name="multi_panel">
+                        <param argument="multi_panel" type="select" label="Display keys in multiple panels" help="Also when `groupby is not provided">
+                            <option value="True">Yes</option>
+                            <option value="False" selected="true">No</option>
+                        </param>
+                        <when value="True">
+                            <param argument="width" type="integer" min="0" value="" optional="true" label="Width of the figure" help=""/>
+                            <param argument="height" type="integer" min="0" value="" optional="true" label="Height of the figure" help=""/>
+                        </when>
+                        <when value="False"/>
+                    </conditional>
+                    <expand macro="param_scale"/>
+                </section>
                 <param argument="xlabel" type="text" value="" optional="true" label="Label of the x axis" help="Defaults to `groupby` if `rotation` is `None`,    otherwise, no label is shown."/>
                 <param argument="rotation" type="float" value="" optional="true" label="Rotation of xtick labels" help=""/>
                 <expand macro="seaborn_violinplot"/>
             </when>
+            <when value="pl.stacked_violin">
+                <expand macro="params_plots"/>
+                <expand macro="param_swap_axes"/>
+                <section name="violin_plot" title="Violin plot attributes">
+                    <expand macro="conditional_stripplot"/>
+                    <expand macro="param_scale"/>
+                </section>
+                <param argument="row_palette" type="select" label="Colors to use in each of the stacked violin plots">
+                    <option value="muted">muted</option>
+                    <expand macro="seaborn_color_palette_options"/>
+                </param>
+                <param argument="standard_scale" type="select" label="Standardize a dimension between 0 and 1" help="Each variable or observation is subtracted by the minimum and divided each by its maximum.">
+                    <option value="None">No standardization</option>
+                    <option value="var">Standardization on variable</option>
+                    <option value="obs">Standardization on observation</option>
+                </param>
+                <expand macro="seaborn_violinplot"/>
+            </when>
             <when value="pl.matrixplot">
                 <expand macro="params_plots"/>
                 <expand macro="param_swap_axes"/>
@@ -427,7 +573,7 @@
                 </section>
             </when>
             <when value="pl.clustermap">
-                <param argument="obs_keys" type="text" value="" label="Categorical annotation to plot with a different color map" help="Currently, only a single key is supported."/>
+                <param argument="obs_keys" type="text" value="" optional="true" label="Categorical annotation to plot with a different color map" help="Currently, only a single key is supported."/>
                 <expand macro="param_use_raw"/>
                 <section name="seaborn_clustermap" title="Parameters for seaborn.clustermap">
                     <param name="method" type="select" label="Linkage method to use for calculating clusters" help="More details in https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.linkage.html">
@@ -456,6 +602,10 @@
                     <param name="row_cluster" type="boolean" truevalue="True" falsevalue="False" checked="false" label="Cluster the rows?" help=""/>
                 </section>
             </when>
+            <when value="pl.highly_variable_genes">
+                <expand macro="param_log"/>
+                <param argument="highly_variable_genes" type="boolean" truevalue="True" falsevalue="False" checked="true" label="Plot highly variable genes or gene subset?"/>
+            </when>
             <when value="pl.highest_expr_genes">
                 <param argument="n_top" type="integer" min="0" value="30" label="Number of top genes" help=""/>
                 <param argument="gene_symbols" type="text" optional="true" label="Key for field in `.var` that stores gene symbols" help="Fill it if you do not want to use `.var_names`."/>
@@ -518,6 +668,20 @@
                 <expand macro="pl_attribute_section"/>
                 <expand macro="section_matplotlib_pyplot_scatter"/>
             </when>
+            <when value="pl.draw_graph">
+                <expand macro="param_color"/>
+                <expand macro="gene_symbols"/>
+                <expand macro="param_use_raw"/>
+                <param argument="layout" type="select" optional="true" label="Plotting layout" help="">
+                    <expand macro="options_layout"/>
+                </param>
+                <expand macro="pl_edges"/>
+                <expand macro="param_arrows"/>
+                <expand macro="param_sort_order"/>
+                <expand macro="pl_groups"/>
+                <expand macro="pl_attribute_section"/>
+                <expand macro="section_matplotlib_pyplot_scatter"/>
+            </when>
             <when value="pl.dpt_groups_pseudotime">
                 <expand macro="param_color_map"/>
             </when>
@@ -536,35 +700,92 @@
             <when value="pl.paga">
                 <expand macro="inputs_paga"/>
             </when>
+            <when value="pl.paga_compare">
+                <expand macro="inputs_paga"/>
+            </when>
+            <when value="pl.paga_path">
+                <param argument="nodes" type="text" value="" label="A path through nodes of the abstracted graph" 
+                    help="Each node is represented by its indice (within .categories) for the groups that have been used to run PAGA. Comma-separated"/>
+                <param argument="keys" type="text" value="" label="Keys for accessing variables" help="One or a list of comma-separated index or key from `.var_names` or fields of `.obs`"/>
+                <expand macro="param_use_raw"/>
+                <param argument="annotations" type="text" value="" optional="true" label="Key to plot" help="Keys for obs, comma-separated"/>
+                <expand macro="param_color_map"/>
+                <param argument="n_avg" type="integer" value="1" label="Number of data points to include in computation of running average"/>
+                <param argument="groups_key" type="text" value="" optional="true" label="Key of the grouping used to run PAGA" help="If not set, use uns/page/groups"/>
+                <param argument="as_heatmap" type="boolean" truevalue="True" falsevalue="False" checked="true" label="Plot the timeseries as heatmap?" help="If not, annotations have no effect."/>
+                <param argument="show_node_names" type="boolean" truevalue="True" falsevalue="False" checked="true" label="Plot the node names on the nodes bar?"/>
+                <param argument="show_colorbar" type="boolean" truevalue="True" falsevalue="False" checked="true" label="Show the colorbar?"/>
+                <param argument="show_yticks" type="boolean" truevalue="True" falsevalue="False" checked="true" label="Show the y ticks?"/>
+                <param argument="normalize_to_zero_one" type="boolean" truevalue="True" falsevalue="False" checked="true" label="Shift and scale the running average to [0, 1] per gene?"/>
+            </when>
+            <when value="pl.rank_genes_groups">
+                <expand macro="pl_groups"/>
+                <expand macro="n_genes"/>
+                <expand macro="gene_symbols"/>
+                <param argument="fontsize" type="integer" min="0" value="8" label="Font size for gene names"/>
+                <expand macro="param_ncols"/>
+                <param argument="sharey" type="boolean" truevalue="True" falsevalue="False" checked="true" label="Should the y-axis of each panels be shared?" help="If not, each panel has its own y-axis range"/>
+            </when>
+            <when value="pl.rank_genes_groups_violin">
+                <expand macro="pl_groups"/>
+                <conditional name="genes">
+                    <param argument="select" type="select" label="Which genes to plot?" help="">
+                        <option value="n_genes">A number of genes</option>
+                        <option value="gene_names">A custom list of genes</option>
+                    </param>
+                    <when value="n_genes">
+                        <expand macro="n_genes"/>
+                    </when>
+                    <when value="gene_names">
+                        <param argument="gene_names" type="text" value="" label="List of genes to plot" help="A list of comma-separated names"/>
+                    </when>
+                </conditional>
+                <expand macro="gene_symbols"/>
+                <expand macro="param_use_raw"/>
+                <param argument="split" type="boolean" truevalue="True" falsevalue="False" checked="true" label="Split the violins?"/>
+                <section name="violin_plot" title="Violin plot attributes">
+                    <expand macro="conditional_stripplot"/>
+                    <expand macro="param_scale"/>
+                </section>
+            </when>
         </conditional>
     </inputs>
     <outputs>
-        <data name="out_png" format="png" from_work_dir="*.png" label="${tool.name} on ${on_string}">
-            <filter>format == 'png'</filter>
+        <data name="out_png" format="png" from_work_dir="*.png" label="${tool.name} (${method.method}) on ${on_string}">
+            <filter>format == 'png' and method['method'] != 'pl.rank_genes_groups_violin'</filter>
+        </data>
+        <collection name="collection_png" type="list" label="${tool.name} (${method.method}) on ${on_string}">
+            <discover_datasets pattern="rank_genes_groups_cell_type_(?P&lt;designation&gt;.*).png" format="png"/>
+            <filter>format == 'png' and method['method'] == 'pl.rank_genes_groups_violin'</filter>
+        </collection>
+        <data name="out_pdf" format="pdf" from_work_dir="*.pdf" label="${tool.name} (${method.method}) on ${on_string}">
+            <filter>format == 'pdf' and method['method'] != pl.rank_genes_groups_violin</filter>
         </data>
-        <data name="out_pdf" format="pdf" from_work_dir="*.pdf" label="${tool.name} on ${on_string}">
-            <filter>format == 'pdf'</filter>
+        <collection name="collection_pdf" type="list" label="${tool.name} (${method.method}) on ${on_string}">
+            <discover_datasets pattern="rank_genes_groups_cell_type_(?P&lt;designation&gt;.*).pdf" format="pdf"/>
+            <filter>format == 'pdf' and method['method'] == 'pl.rank_genes_groups_violin'</filter>
+        </collection>
+        <data name="out_svg" format="svg" from_work_dir="*.svg" label="${tool.name} (${method.method}) on ${on_string}">
+            <filter>format == 'svg' and method['method'] != pl.rank_genes_groups_violin</filter>
         </data>
-        <data name="out_svg" format="svg" from_work_dir="*.svg" label="${tool.name} on ${on_string}">
-            <filter>format == 'svg'</filter>
-        </data>
+        <collection name="collection_svg" type="list" label="${tool.name} (${method.method}) on ${on_string}">
+            <discover_datasets pattern="rank_genes_groups_cell_type_(?P&lt;designation&gt;.*).svg" format="svg"/>
+            <filter>format == 'svg' and method['method'] == 'pl.rank_genes_groups_violin'</filter>
+        </collection>
     </outputs>
     <tests>
         <test>
-            <!-- Test pl.scatter !-->
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="pp.pca.krumsiek11.h5ad" />
-            </conditional>
+            <!-- test 1: pl.scatter !-->
+            <param name="adata" value="pbmc68k_reduced.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.scatter"/>
                 <conditional name="type">
                     <param name="type" value="basis"/>
-                    <param name="basis" value="pca"/>
-                    <param name="color" value="EgrNab, Gata2"/>
+                    <param name="basis" value="umap"/>
+                    <param name="color" value="HES4"/>
                 </conditional>
-                <param name="use_raw" value="False"/>
+                <param name="use_raw" value="True"/>
                 <param name="sort_order" value="True"/>
                 <section name="plot">
                     <param name="projection" value="2d"/>
@@ -579,12 +800,10 @@
             </conditional>
             <assert_stdout>
                 <has_text_matching expression="sc.pl.scatter"/>
-                <has_text_matching expression="basis='pca'" />
-                <has_text_matching expression="color=\['EgrNab', 'Gata2'\]"/>
-                <has_text_matching expression="use_raw=False"/>
+                <has_text_matching expression="basis='umap'" />
+                <has_text_matching expression="color=\['HES4'\]"/>
+                <has_text_matching expression="use_raw=True"/>
                 <has_text_matching expression="sort_order=True"/>
-                <has_text_matching expression="groups=None"/>
-                <has_text_matching expression="components=None"/>
                 <has_text_matching expression="projection='2d'"/>
                 <has_text_matching expression="legend_loc='right margin'"/>
                 <has_text_matching expression="legend_fontsize=1"/>
@@ -594,14 +813,11 @@
                 <has_text_matching expression="frameon=True"/>
                 <has_text_matching expression="size=1.0"/>
             </assert_stdout>
-            <output name="out_png" file="pl.scatter.pca.krumsiek11.png" ftype="png" compare="sim_size"/>
+            <output name="out_png" file="pl.scatter.umap.pbmc68k_reduced.png" ftype="png" compare="sim_size"/>
         </test>
         <test>
-            <!-- Test pl.scatter !-->
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="krumsiek11.h5ad" />
-            </conditional>
+            <!-- test 2: pl.scatter !-->
+            <param name="adata" value="krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.scatter"/>
@@ -609,9 +825,9 @@
                     <param name="type" value="xy"/>
                     <param name="x" value="EKLF"/>
                     <param name="y" value="Cebpa"/>
-                    <param name="layer_x" value="X"/>
-                    <param name="layer_y" value="X"/>
-                    <param name="layer_color" value="X"/>
+                    <conditional name="layers">
+                        <param name="use_layers" value="false"/>
+                    </conditional>
                 </conditional>
                 <param name="use_raw" value="False"/>
                 <param name="sort_order" value="True"/>
@@ -630,11 +846,8 @@
                 <has_text_matching expression="sc.pl.scatter"/>
                 <has_text_matching expression="x='EKLF'" />
                 <has_text_matching expression="y='Cebpa'"/>
-                <has_text_matching expression="layers=\('X', 'X', 'X'\)"/>
                 <has_text_matching expression="use_raw=False"/>
                 <has_text_matching expression="sort_order=True"/>
-                <has_text_matching expression="groups=None,"/>
-                <has_text_matching expression="components=None,"/>
                 <has_text_matching expression="projection='2d'"/>
                 <has_text_matching expression="legend_loc='right margin'"/>
                 <has_text_matching expression="legend_fontsize=1"/>
@@ -648,11 +861,8 @@
             <output name="out_png" file="pl.scatter.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
         <test>
-            <!-- test pl.heatmap !-->
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="krumsiek11.h5ad" />
-            </conditional>
+            <!-- test 3: pl.heatmap !-->
+            <param name="adata" value="krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.heatmap"/>
@@ -673,7 +883,7 @@
                 <param name="show_gene_labels" value="False"/>
                 <section name="matplotlib_pyplot_imshow">
                     <param name="cmap" value="YlGnBu"/>
-                    <param name="interpolation" value="none"/>
+                    <param name="interpolation" value="None"/>
                     <param name="origin" value="upper"/>
                 </section>
             </conditional>
@@ -685,23 +895,17 @@
                 <has_text_matching expression="use_raw=False"/>
                 <has_text_matching expression="num_categories=7"/>
                 <has_text_matching expression="dendrogram=True"/>
-                <has_text_matching expression="var_group_positions=None"/>
-                <has_text_matching expression="var_group_labels=None"/>
                 <has_text_matching expression="figsize=\(10, 3\)"/>
                 <has_text_matching expression="swap_axes=True"/>
                 <has_text_matching expression="show_gene_labels=False"/>
-                <has_text_matching expression="interpolation='none'"/>
                 <has_text_matching expression="cmap='YlGnBu'"/>
                 <has_text_matching expression="origin='upper'"/>
             </assert_stdout>
             <output name="out_png" file="pl.heatmap.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
         <test>
-            <!-- test pl.dotplot !-->
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="pbmc68k_reduced.h5ad" />
-            </conditional>
+            <!-- test 4: pl.dotplot !-->
+            <param name="adata" value="pbmc68k_reduced.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.dotplot"/>
@@ -714,10 +918,6 @@
                 <param name="use_raw" value="False"/>
                 <param name="num_categories" value="7"/>
                 <param name="dendrogram" value="True"/>
-                <conditional name="figsize">
-                    <param name="test" value="no"/>
-                </conditional>
-                <param name="dendrogram" value="False"/>
                 <repeat name="var_group_positions">
                     <param name="start" value="0"/>
                     <param name="end" value="1"/>
@@ -728,6 +928,9 @@
                     <param name="end" value="12"/>
                     <param name="label" value="dendritic"/>
                 </repeat>
+                <conditional name="figsize">
+                    <param name="test" value="no"/>
+                </conditional>
                 <param name="color_map" value="hot"/>
                 <param name="dot_max" value="0.7"/>
                 <param name="dot_min" value="0.1"/>
@@ -743,7 +946,7 @@
                 <has_text_matching expression="log=False"/>
                 <has_text_matching expression="use_raw=False"/>
                 <has_text_matching expression="num_categories=7"/>
-                <has_text_matching expression="dendrogram=False"/>
+                <has_text_matching expression="dendrogram=True"/>
                 <has_text_matching expression="var_group_positions=\[\(0, 1\), \(11, 12\)\]"/>
                 <has_text_matching expression="var_group_labels=\['B cells', 'dendritic'\]"/>
                 <has_text_matching expression="color_map='hot'"/>
@@ -755,11 +958,8 @@
             <output name="out_png" file="pl.dotplot.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
         <test>
-            <!-- test pl.violin !-->
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="pbmc68k_reduced.h5ad" />
-            </conditional>
+            <!-- test 5: pl.violin !-->
+            <param name="adata" value="pbmc68k_reduced.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.violin"/>
@@ -795,10 +995,11 @@
                 <has_text_matching expression="keys=\['n_genes', 'percent_mito', 'n_counts'\]" />
                 <has_text_matching expression="log=False"/>
                 <has_text_matching expression="use_raw=False"/>
-                <has_text_matching expression="sstripplot=True"/>
+                <has_text_matching expression="stripplot=True"/>
                 <has_text_matching expression="jitter=True"/>
                 <has_text_matching expression="size=1"/>
                 <has_text_matching expression="multi_panel=True"/>
+                <has_text_matching expression="figsize=\(20, 20\)"/>
                 <has_text_matching expression="scale='width'"/>
                 <has_text_matching expression="bw='scott'"/>
                 <has_text_matching expression="scale='width'"/>
@@ -810,11 +1011,65 @@
             <output name="out_png" file="pl.violin.pbmc68k_reduced_custom.png" ftype="png" compare="sim_size"/>
         </test>
         <test>
-            <!-- test pl.matrixplot !-->
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="krumsiek11.h5ad" />
+            <!-- test 6: pl.stacked_violin !-->
+            <param name="adata" value="krumsiek11.h5ad" />
+            <param name="format" value="png"/>
+            <conditional name="method">
+                <param name="method" value="pl.stacked_violin"/>
+                <conditional name="var_names">
+                    <param name="type" value="all"/>
+                </conditional>
+                <param name="groupby" value="cell_type"/>
+                <param name="log" value="False"/>
+                <param name="use_raw" value="False"/>
+                <param name="num_categories" value="7"/>
+                <param name="dendrogram" value="True"/>
+                <conditional name="figsize">
+                    <param name="test" value="no"/>
+                </conditional>
+                <param name="swap_axes" value="True"/>
+                <section name="violin_plot">
+                    <conditional name="stripplot">
+                        <param name="stripplot" value="True"/>
+                        <param name="jitter" value="True"/>
+                        <param name="size" value="1"/>
+                    </conditional>
+                    <param name="scale" value="width"/>
+                </section>
+                <param name="row_palette" value="muted"/>
+                <param name="standard_scale" value="None"/>
+                <section name="seaborn_violinplot">
+                    <param name="bw" value="scott"/>
+                    <param name="linewidth" value="0"/>
+                    <param name="color" value="AliceBlue"/>
+                    <param name="palette" value="viridis"/>
+                    <param name="saturation" value="0.75"/>
+                </section>
             </conditional>
+            <assert_stdout>
+                <has_text_matching expression="sc.pl.stacked_violin"/>
+                <has_text_matching expression="groupby='cell_type'"/>
+                <has_text_matching expression="log=False"/>
+                <has_text_matching expression="use_raw=False"/>
+                <has_text_matching expression="num_categories=7"/>
+                <has_text_matching expression="dendrogram=True"/>
+                <has_text_matching expression="swap_axes=True"/>
+                <has_text_matching expression="stripplot=True"/>
+                <has_text_matching expression="jitter=True"/>
+                <has_text_matching expression="size=1"/>
+                <has_text_matching expression="scale='width'"/>
+                <has_text_matching expression="bw='scott'"/>
+                <has_text_matching expression="scale='width'"/>
+                <has_text_matching expression="linewidth=0.0"/>
+                <has_text_matching expression="color='AliceBlue'"/>
+                <has_text_matching expression="palette='viridis'"/>
+                <has_text_matching expression="saturation=0.75"/>
+            </assert_stdout>
+            <output name="out_png" file="pl.stacked_violin.krumsiek11.png" ftype="png" compare="sim_size"/>
+        </test>
+        <test>
+            <!-- test 7: pl.matrixplot !-->
+            <param name="adata" value="krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.matrixplot"/>
@@ -844,8 +1099,6 @@
                 <has_text_matching expression="use_raw=False"/>
                 <has_text_matching expression="num_categories=7"/>
                 <has_text_matching expression="dendrogram=True"/>
-                <has_text_matching expression="var_group_positions=None"/>
-                <has_text_matching expression="var_group_labels=None"/>
                 <has_text_matching expression="swap_axes=True"/>
                 <has_text_matching expression="cmap='viridis'"/>
                 <has_text_matching expression="edgecolors='face'"/>
@@ -854,19 +1107,15 @@
             <output name="out_png" file="pl.matrixplot.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
         <test>
-            <!-- test pl.clustermap !-->
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="krumsiek11.h5ad" />
-            </conditional>
+            <!-- test 8: pl.clustermap !-->
+            <param name="adata" value="krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.clustermap"/>
-                <param name="obs_keys" value="cell_type"/>
                 <param name="use_raw" value="False"/>
                 <section name="seaborn_clustermap">
                     <param name="method" value="single"/>
-                    <param name="metric" value="braycurtis"/>
+                    <param name="metric" value="euclidean"/>
                     <param name="z_score" value="None"/>
                     <param name="standard_scale" value="None"/>
                     <param name="col_cluster" value="False"/>
@@ -876,23 +1125,17 @@
             <assert_stdout>
                 <has_text_matching expression="sc.pl.clustermap"/>
                 <has_text_matching expression="adata=adata" />
-                <has_text_matching expression="obs_keys='cell_type'" />
                 <has_text_matching expression="use_raw=False"/>
                 <has_text_matching expression="method='single'"/>
-                <has_text_matching expression="metric='braycurtis'"/>
-                <has_text_matching expression="z_score=None"/>
-                <has_text_matching expression="standard_scale=None"/>
+                <has_text_matching expression="metric='euclidean'"/>
                 <has_text_matching expression="col_cluster=False"/>
                 <has_text_matching expression="row_cluster=False"/>
             </assert_stdout>
             <output name="out_png" file="pl.clustermap.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
         <test>
-            <!-- test pl.highest_expr_genes !-->
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="pp.filter_genes_dispersion.krumsiek11-seurat.h5ad" />
-            </conditional>
+            <!-- test 9: pl.highest_expr_genes !-->
+            <param name="adata" value="pp.filter_genes_dispersion.krumsiek11-seurat.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.highest_expr_genes"/>
@@ -913,11 +1156,25 @@
             <output name="out_png" file="pl.highest_expr_genes.filter_genes_dispersion.krumsiek11-seurat.png" ftype="png" compare="sim_size"/>
         </test>
         <test>
-            <!-- test pl.pca !-->
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="pbmc68k_reduced.h5ad" />
+            <!-- test 10: pl.highly_variable_genes !-->
+            <param name="adata" value="pp.highly_variable_genes.seurat.blobs.h5ad" />
+            <param name="format" value="png"/>
+            <conditional name="method">
+                <param name="method" value="pl.highly_variable_genes"/>
+                <param name="log" value="false"/>
+                <param name="highly_variable_genes" value="true"/>
             </conditional>
+            <assert_stdout>
+                <has_text_matching expression="sc.pl.highly_variable_genes"/>
+                <has_text_matching expression="adata_or_result=adata" />
+                <has_text_matching expression="log=False" />
+                <has_text_matching expression="highly_variable_genes=True"/>
+            </assert_stdout>
+            <output name="out_png" file="pl.highly_variable_genes.seurat.blobs.png" ftype="png" compare="sim_size"/>
+        </test>
+        <test>
+            <!-- test 11: pl.pca !-->
+            <param name="adata" value="pbmc68k_reduced.h5ad" />
             <param name="format" value="pdf"/>
             <conditional name="method">
                 <param name="method" value="pl.pca"/>
@@ -955,7 +1212,6 @@
                 <has_text_matching expression="color=\['CD3D', 'CD79A'\]" />
                 <has_text_matching expression="use_raw=False" />
                 <has_text_matching expression="sort_order=True" />
-                <has_text_matching expression="groups=None" />
                 <has_text_matching expression="components=\['1,2', '1,3'\]" />
                 <has_text_matching expression="projection='2d'" />
                 <has_text_matching expression="legend_loc='right margin'" />
@@ -973,11 +1229,8 @@
             <output name="out_pdf" file="pl.pca.pbmc68k_reduced.CD3D_CD79A_components_2d.pdf" ftype="pdf" compare="sim_size"/>
         </test>
         <test>
-            <!-- test pl.pca_loadings !-->
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="pp.pca.krumsiek11.h5ad" />
-            </conditional>
+            <!-- test 12: pl.pca_loadings !-->
+            <param name="adata" value="pp.pca.krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.pca_loadings"/>
@@ -987,14 +1240,11 @@
                 <has_text_matching expression="sc.pl.pca_loadings"/>
                 <has_text_matching expression="components=\[1, 2, 3\]" />
             </assert_stdout>
-            <output name="out_png" file="pl.pca_loadings.pp.pca.krumsiek11.png"/>
+            <output name="out_png" file="pl.pca_loadings.pp.pca.krumsiek11.png" compare="sim_size"/>
         </test>
         <test>
-            <!-- test pl.pca_variance_ratio !-->
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="pp.pca.krumsiek11.h5ad" />
-            </conditional>
+            <!-- test 13: pl.pca_variance_ratio !-->
+            <param name="adata" value="pp.pca.krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.pca_variance_ratio"/>
@@ -1006,22 +1256,18 @@
                 <has_text_matching expression="n_pcs=5" />
                 <has_text_matching expression="log=False" />
             </assert_stdout>
-            <output name="out_png" file="pl.pca_variance_ratio.pp.pca.krumsiek11.png"/>
+            <output name="out_png" file="pl.pca_variance_ratio.pp.pca.krumsiek11.png" compare="sim_size"/>
         </test>
         <test>
-            <!-- test pl.pca_overview !-->
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="pp.pca.krumsiek11.h5ad" />
-            </conditional>
+            <!-- test 14: pl.pca_overview !-->
+            <param name="adata" value="pp.pca.krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.pca_overview"/>
-                <param name="color" value="cell_type"/>
                 <param name="use_raw" value="False"/>
                 <param name="sort_order" value="True"/>
                 <section name="plot">
-                    <param name="projection" value="3d"/>
+                    <param name="projection" value="2d"/>
                     <param name="legend_loc" value="right margin"/>
                     <param name="legend_fontsize" value="1"/>
                     <param name="legend_fontweight" value="normal"/>
@@ -1032,22 +1278,12 @@
                     <param name="wspace" value="0.1"/>
                     <param name="hspace" value="0.25"/>
                 </section>
-                <section name="matplotlib_pyplot_scatter">
-                    <param name="linewidths" value="0"/>
-                    <param name="edgecolors" value="face"/>
-                    <param name="vmin" value="-5"/>
-                    <param name="vmax" value="5"/>
-                    <param name="edgecolors" value="face"/>
-                </section>
             </conditional>
             <assert_stdout>
                 <has_text_matching expression="sc.pl.pca_overview"/>
-                <has_text_matching expression="color=\['cell_type'\]"/>
                 <has_text_matching expression="use_raw=False"/>
                 <has_text_matching expression="sort_order=True"/>
-                <has_text_matching expression="groups=None"/>
-                <has_text_matching expression="components=None"/>
-                <has_text_matching expression="projection='3d'"/>
+                <has_text_matching expression="projection='2d'"/>
                 <has_text_matching expression="legend_loc='right margin'"/>
                 <has_text_matching expression="legend_fontsize=1"/>
                 <has_text_matching expression="legend_fontweight='normal'"/>
@@ -1057,19 +1293,12 @@
                 <has_text_matching expression="ncols=4"/>
                 <has_text_matching expression="wspace=0.1"/>
                 <has_text_matching expression="hspace=0.25"/>
-                <has_text_matching expression="vmin=-5.0"/>
-                <has_text_matching expression="vmax=5.0"/>
-                <has_text_matching expression="linewidths=0.0"/>
-                <has_text_matching expression="edgecolors='face'"/>
             </assert_stdout>
             <output name="out_png" file="pl.pca_overview.pp.pca.krumsiek11.png" compare="sim_size"/>
         </test>
         <test>
-            <!-- test pl.tsne !-->
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="tl.tsne.krumsiek11.h5ad" />
-            </conditional>
+            <!-- test 15: pl.tsne !-->
+            <param name="adata" value="tl.tsne.krumsiek11.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.tsne"/>
@@ -1098,13 +1327,10 @@
             </conditional>
             <assert_stdout>
                 <has_text_matching expression="sc.pl.tsne"/>
-                <has_text_matching expression="color=None"/>
                 <has_text_matching expression="use_raw=False"/>
                 <has_text_matching expression="edges=False"/>
                 <has_text_matching expression="arrows=False"/>
                 <has_text_matching expression="sort_order=True"/>
-                <has_text_matching expression="groups=None"/>
-                <has_text_matching expression="components=None"/>
                 <has_text_matching expression="projection='2d'"/>
                 <has_text_matching expression="legend_loc='right margin'"/>
                 <has_text_matching expression="legend_fontsize=1"/>
@@ -1121,11 +1347,8 @@
             <output name="out_png" file="pl.tsne.krumsiek11.png" ftype="png" compare="sim_size"/>
         </test>
         <test>
-            <!-- test pl.umap !-->
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="tl.umap.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.h5ad" />
-            </conditional>
+            <!-- test 16: pl.umap !-->
+            <param name="adata" value="tl.umap.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.umap"/>
@@ -1163,8 +1386,6 @@
                 <has_text_matching expression="edges_color='AliceBlue'"/>
                 <has_text_matching expression="arrows=False"/>
                 <has_text_matching expression="sort_order=True"/>
-                <has_text_matching expression="groups=None"/>
-                <has_text_matching expression="components=None"/>
                 <has_text_matching expression="projection='2d'"/>
                 <has_text_matching expression="legend_loc='right margin'"/>
                 <has_text_matching expression="legend_fontsize=1"/>
@@ -1181,11 +1402,8 @@
             <output name="out_png" file="pl.umap.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.png" ftype="png" compare="sim_size"/>
         </test>
         <test>
-            <!-- test pl.diffmap !-->
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="tl.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad" />
-            </conditional>
+            <!-- test 17: pl.diffmap !-->
+            <param name="adata" value="tl.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.diffmap"/>
@@ -1214,8 +1432,6 @@
                 <has_text_matching expression="color=\['paul15_clusters'\]"/>
                 <has_text_matching expression="use_raw=False"/>
                 <has_text_matching expression="sort_order=True"/>
-                <has_text_matching expression="groups=None"/>
-                <has_text_matching expression="components=None"/>
                 <has_text_matching expression="projection='2d'"/>
                 <has_text_matching expression="legend_loc='right margin'"/>
                 <has_text_matching expression="legend_fontsize=1"/>
@@ -1231,12 +1447,59 @@
             </assert_stdout>
             <output name="out_png" file="pl.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.png" ftype="png" compare="sim_size"/>
         </test>
+        <test>
+            <!-- test 18: pl.draw_graph !-->
+            <param name="adata" value="tl.draw_graph.pp.neighbors_umap_euclidean.recipe_weinreb17.paul15_subsample.h5ad" />
+            <param name="format" value="png"/>
+            <conditional name="method">
+                <param name="method" value="pl.draw_graph"/>
+                <param name="use_raw" value="false"/>
+                <conditional name="edges">
+                    <param name="edges" value="True"/>
+                    <param name="edges_width" value="0.1"/>
+                    <param name="edges_color" value="Crimson"/>
+                </conditional>
+                <param name="arrows" value="false"/>
+                <param name="sort_order" value="false"/>
+                <section name="plot">
+                    <param name="projection" value="2d"/>
+                    <param name="legend_loc" value="right margin"/>
+                    <param name="legend_fontweight" value="normal"/>
+                    <param name="palette" value="viridis"/>
+                    <param name="frameon" value="True"/>
+                    <param name="ncols" value="4"/>
+                    <param name="wspace" value="0.1"/>
+                    <param name="hspace" value="0.25"/>
+                </section>
+                <section name="matplotlib_pyplot_scatter">
+                    <param name="linewidths" value="0"/>
+                    <param name="edgecolors" value="face"/>
+                </section>
+            </conditional>
+            <assert_stdout>
+                <has_text_matching expression="sc.pl.draw_graph"/>
+                <has_text_matching expression="use_raw=False"/>
+                <has_text_matching expression="edges=True"/>
+                <has_text_matching expression="edges_width=0.1"/>
+                <has_text_matching expression="edges_color='Crimson'"/>
+                <has_text_matching expression="arrows=False"/>
+                <has_text_matching expression="sort_order=False"/>
+                <has_text_matching expression="projection='2d'"/>
+                <has_text_matching expression="legend_loc='right margin'"/>
+                <has_text_matching expression="legend_fontweight='normal'"/>
+                <has_text_matching expression="palette='viridis'"/>
+                <has_text_matching expression="frameon=True"/>
+                <has_text_matching expression="ncols=4"/>
+                <has_text_matching expression="wspace=0.1"/>
+                <has_text_matching expression="hspace=0.25"/>
+                <has_text_matching expression="linewidths=0.0"/>
+                <has_text_matching expression="edgecolors='face"/>
+            </assert_stdout>
+            <output name="out_png" file="pl.draw_graph.png" ftype="png" compare="sim_size"/>
+        </test>
         <!--<test>
             < test pl.dpt_groups_pseudotime >
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="tl.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad" />
-            </conditional>
+            <param name="adata" value="tl.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.dpt_groups_pseudotime"/>
@@ -1249,11 +1512,8 @@
             <output name="out_png" file="pl.dpt_groups_pseudotime.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.png" ftype="png" compare="sim_size"/>
         </test>!-->
         <test>
-            <!-- test pl.dpt_timeseries !-->
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="tl.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad" />
-            </conditional>
+            <!-- test 19: pl.dpt_timeseries !-->
+            <param name="adata" value="tl.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.dpt_timeseries"/>
@@ -1271,10 +1531,7 @@
         </test>
         <!--<test>
              test pl.paga
-            <conditional name="input">
-                <param name="format" value="h5ad" />
-                <param name="adata" value="tl.paga.neighbors.paul15_gauss_braycurtis.h5ad" />
-            </conditional>
+            <param name="adata" value="tl.paga.neighbors.paul15_gauss_braycurtis.h5ad" />
             <param name="format" value="png"/>
             <conditional name="method">
                 <param name="method" value="pl.paga"/>
@@ -1296,6 +1553,71 @@
             </conditional>
             <output name="out_png" file="pl.paga.paul15_gauss_braycurtis.png" ftype="png" compare="sim_size"/>
         </test>!-->
+        <!--<test>
+             test pl.paga_compare
+        </test>!-->
+        <!--<test>
+             test pl.paga_path
+        </test>!-->  
+        <test>
+            <!-- test 20: pl.rank_genes_groups !-->
+            <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad" />
+            <param name="format" value="png"/>
+            <conditional name="method">
+                <param name="method" value="pl.rank_genes_groups"/>
+                <param name="n_genes" value="10"/>
+                <param name="fontsize" value="8"/>
+                <param name="ncols" value="4"/>
+                <param name="sharey" value="true"/>
+            </conditional>
+            <assert_stdout>
+                <has_text_matching expression="sc.pl.rank_genes_groups"/>
+                <has_text_matching expression="n_genes=10"/>
+                <has_text_matching expression="fontsize=8"/>
+                <has_text_matching expression="ncols=4"/>
+                <has_text_matching expression="sharey=True"/>
+            </assert_stdout>
+            <output name="out_png" file="pl.rank_genes_groups.rank_genes_groups.krumsiek11.png" ftype="png" compare="sim_size"/>
+        </test>
+        <test>
+            <!-- test 21: pl.rank_genes_groups_violin !-->
+            <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad" />
+            <param name="format" value="png"/>
+            <conditional name="method">
+                <param name="method" value="pl.rank_genes_groups_violin"/>
+                <conditional name="genes">
+                    <param name="select" value="n_genes"/>
+                    <param name="n_genes" value="10"/>
+                </conditional>
+                <param name="use_raw" value="false"/>
+                <param name="split" value="true"/>
+                <section name="violin_plot">
+                    <conditional name="stripplot">
+                        <param name="stripplot" value="True"/>
+                        <param name="jitter" value="True"/>
+                        <param name="size" value="1"/>
+                    </conditional>
+                    <param name="scale" value="width"/>
+                </section>
+            </conditional>
+            <assert_stdout>
+                <has_text_matching expression="sc.pl.rank_genes_groups_violin"/>
+                <has_text_matching expression="n_genes=10"/>
+                <has_text_matching expression="use_raw=False"/>
+                <has_text_matching expression="split=True"/>
+                <has_text_matching expression="strip=True"/>
+                <has_text_matching expression="jitter=True"/>
+                <has_text_matching expression="size=1"/>
+                <has_text_matching expression="scale='width'"/>
+            </assert_stdout>
+            <output_collection name="collection_png">
+                <element name="Ery" file="pl.rank_genes_groups_violin.Ery.png" ftype="png" compare="sim_size"/>
+                <element name="Mk" file="pl.rank_genes_groups_violin.Mk.png" ftype="png" compare="sim_size"/>
+                <element name="Mo" file="pl.rank_genes_groups_violin.Mo.png" ftype="png" compare="sim_size"/>
+                <element name="Neu" file="pl.rank_genes_groups_violin.Neu.png" ftype="png" compare="sim_size"/>
+                <element name="progenitor" file="pl.rank_genes_groups_violin.progenitor.png" ftype="png" compare="sim_size"/>
+            </output_collection>
+        </test>
     </tests>
     <help><![CDATA[
 Generic: Scatter plot along observations or variables axes (`pl.scatter`)
@@ -1342,6 +1664,15 @@
 Wraps `seaborn.violinplot` for `anndata.AnnData`.
 
 More details on the `scanpy documentation
+<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.violin.html>`__
+
+Generic: Stacked violin plots (`pl.stacked_violin`)
+===================================================
+
+Makes a compact image composed of individual violin plots (from `seaborn.violinplot`) 
+stacked on top of each other. Useful to visualize gene expression per cluster.
+
+More details on the `scanpy documentation
 <https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.stacked_violin.html>`__
 
 Generic: Heatmap of the mean expression values per cluster (`pl.matrixplot`)
@@ -1353,7 +1684,7 @@
 category.
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.matrixplot.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.matrixplot.html>`__
 
 Generic: Hierarchically-clustered heatmap (`pl.clustermap`)
 ===========================================================
@@ -1371,7 +1702,7 @@
 Column indices, use: clustergrid.dendrogram_col.reordered_ind
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.clustermap.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.clustermap.html>`__
 
 Preprocessing: Plot the fraction of counts assigned to each gene over all cells (`pl.highest_expr_genes`)
 =========================================================================================================
@@ -1380,30 +1711,36 @@
 a cell. The `n_top` genes with the highest mean fraction over all cells are
 plotted as boxplots.
 
-This plot is similar to the `scater` package function `plotHighestExprs(type= "highest-expression")`, see `here
-<https://bioconductor.org/packages/devel/bioc/vignettes/scater/inst/doc/vignette-qc.html>`__.
--- Davis McCarthy and Aaron Lun
+This plot is similar to the `scater` package function `plotHighestExprs(type= "highest-expression")`
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.highest_expr_genes.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.highest_expr_genes.html>`__
+
+Preprocessing: Plot dispersions versus means for genes (`pl.highly_variable_genes`)
+===================================================================================
+
+It produces Supp. Fig. 5c of Zheng et al. (2017) and MeanVarPlot() of Seurat.
+
+More details on the `scanpy documentation
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.highly_variable_genes.html>`__
 
 PCA: Scatter plot in PCA coordinates (`pl.pca`)
 ===============================================
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.pca.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.pca.html>`__
 
 PCA: Rank genes according to contributions to PCs (`pl.pca_loadings`)
 =====================================================================
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.pca_loadings.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.pca_loadings.html>`__
 
 PCA: Plot the variance ratio (`pl.pca_variance_ratio`)
 ======================================================
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.pca_variance_ratio.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.pca_variance_ratio.html>`__
 
 PCA: Plot PCA results (`pl.pca_overview`)
 =========================================
@@ -1412,37 +1749,37 @@
 if you want to change the default settings.
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.pca_overview.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.pca_overview.html>`__
 
 Embedding: Scatter plot in tSNE basis (`pl.tsne`)
 =================================================
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.tsne.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.tsne.html>`__
 
 Embeddings: Scatter plot in UMAP basis (`pl.umap`)
 ==================================================
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.umap.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.umap.html>`__
 
 Embeddings: Scatter plot in Diffusion Map basis (`pl.diffmap`)
 ==============================================================
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.diffmap.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.diffmap.html>`__
 
 Branching trajectories and pseudotime, clustering: Plot groups and pseudotime (`pl.dpt_groups_pseudotime`)
 ===========================================================================================================
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.dpt_groups_pseudotime.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.dpt_groups_pseudotime.html>`__
 
 Branching trajectories and pseudotime, clustering: Heatmap of pseudotime series (`pl.dpt_timeseries`)
 =====================================================================================================
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.dpt_timeseries.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.dpt_timeseries.html>`__
 
 
 Branching trajectories and pseudotime, clustering: Plot the abstracted graph through thresholding low-connectivity edges (`pl.paga`)
@@ -1455,9 +1792,32 @@
 `maxiter` parameter by 1 if the layout is flipped.
 
 More details on the `scanpy documentation
-<https://scanpy.readthedocs.io/en/latest/api/scanpy.pl.paga.html>`__
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.paga.html>`__
 
 
+Branching trajectories and pseudotime, clustering: Scatter and PAGA graph side-by-side (`pl.paga_compare`)
+==========================================================================================================
+
+More details on the `scanpy documentation
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.paga_compare.html>`__
+
+Branching trajectories and pseudotime, clustering: Gene expression and annotation changes along paths (`pl.paga_path`)
+======================================================================================================================
+
+More details on the `scanpy documentation
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.paga_path.html>`__
+
+Marker genes: Plot ranking of genes using dotplot plot (`pl.rank_genes_groups`)
+===============================================================================
+
+More details on the `scanpy documentation
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.rank_genes_groups.html>`__
+
+Marker genes: Plot ranking of genes for all tested comparisons (`pl.rank_genes_groups_violin`)
+==============================================================================================
+
+More details on the `scanpy documentation
+<https://icb-scanpy.readthedocs-hosted.com/en/stable/api/scanpy.pl.rank_genes_groups_violin.html>`__
     ]]></help>
     <expand macro="citations"/>
 </tool>