view macros.xml @ 1:6a76b60e05f5 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:32:33 -0400
parents 6ea5a05a260a
children e62673c32a5d
line wrap: on
line source

<macros>
    <token name="@version@">1.4.4</token>
    <token name="@galaxy_version@"><![CDATA[@version@+galaxy0]]></token>
    <xml name="requirements">
        <requirements>
            <requirement type="package" version="@version@">scanpy</requirement>
            <requirement type="package" version="2.0.17">loompy</requirement>
            <requirement type="package" version="2.9.0">h5py</requirement>
            <requirement type="package" version="0.7.0">leidenalg</requirement>
            <yield />
        </requirements>
    </xml>
    <xml name="citations">
        <citations>
            <citation type="doi">10.1186/s13059-017-1382-0</citation>
        </citations>
    </xml>
    <xml name="version_command">
        <version_command><![CDATA[python -c "import scanpy as sc;print('scanpy version: %s' % sc.__version__)"]]></version_command>
    </xml>
    <token name="@CMD@"><![CDATA[
cp '$adata' 'anndata.h5ad' &&
cat '$script_file' &&
python '$script_file' &&
ls .
    ]]>
    </token>
    <token name="@CMD_imports@"><![CDATA[
import scanpy as sc
import pandas as pd
import numpy as np
    ]]>
    </token>
    <xml name="inputs_anndata">
        <param name="adata" type="data" format="h5ad" label="Annotated data matrix"/>
    </xml>
    <token name="@CMD_read_inputs@"><![CDATA[
adata = sc.read('anndata.h5ad')
]]>
    </token>
    <xml name="anndata_outputs">
        <data name="anndata_out" format="h5ad" from_work_dir="anndata.h5ad" label="${tool.name} (${method.method}) on ${on_string}: Annotated data matrix"/>
    </xml>
    <token name="@CMD_anndata_write_outputs@"><![CDATA[
adata.write('anndata.h5ad')
]]>
    </token>
    <xml name="svd_solver">
        <param name="svd_solver" type="select" label="SVD solver to use" help="">
            <option value="auto">Automatically chosen depending on the size of the problem</option>
            <option value="arpack">ARPACK wrapper in SciPy</option>
            <option value="randomized">Randomized algorithm due to Halko (2009)</option>
        </param>
    </xml>
    <xml name="pca_random_state">
        <param name="random_state" type="integer" value="0" label="Initial states for the optimization" help=""/>
    </xml>
    <xml name="param_plot_format">
        <param name="format" type="select" label="Format for saving figures">
            <option value="png">png</option>
            <option value="pdf">pdf</option>
            <option value="svg">svg</option>
        </param>
    </xml>
    <xml name="numeric_distance_metric_options">
        <option value="braycurtis">braycurtis</option>
        <option value="canberra">canberra</option>
        <option value="chebyshev">chebyshev</option>
        <option value="cityblock">cityblock</option>
        <option value="correlation">correlation</option>
        <option value="cosine">cosine</option>
        <option value="euclidean" selected="true">euclidean</option>
        <option value="mahalanobis">mahalanobis</option>
        <option value="matching">matching</option>
        <option value="minkowski">minkowski</option>
        <option value="seuclidean">seuclidean</option>
        <option value="sqeuclidean">sqeuclidean</option>
        <option value="wminkowski">wminkowski</option>
    </xml>
    <xml name="boolean_distance_metric_options">
        <option value="dice">dice</option>
        <option value="hamming">hamming</option>
        <option value="jaccard">jaccard</option>
        <option value="kulsinski">kulsinski</option>
        <option value="rogerstanimoto">rogerstanimoto</option>
        <option value="russellrao">russellrao</option>
        <option value="sokalmichener">sokalmichener</option>
        <option value="sokalsneath">sokalsneath</option>
        <option value="yule">yule</option>
    </xml>
    <xml name="distance_metric_options">
        <expand macro="numeric_distance_metric_options"/>
        <expand macro="boolean_distance_metric_options"/>
    </xml>
    <xml name="seaborn_color_palette_options">
        <option value="Accent">Accent</option>
        <option value="Accent_r">Accent_r</option>
        <option value="Blues">Blues</option>
        <option value="Blues_r">Blues_r</option>
        <option value="BrBG">BrBG</option>
        <option value="BrBG_r">BrBG_r</option>
        <option value="BuGn">BuGn</option>
        <option value="BuGn_r">BuGn_r</option>
        <option value="BuPu">BuPu</option>
        <option value="BuPu_r">BuPu_r</option>
        <option value="CMRmap">CMRmap</option>
        <option value="CMRmap_r">CMRmap_r</option>
        <option value="Dark2">Dark2</option>
        <option value="Dark2_r">Dark2_r</option>
        <option value="GnBu">GnBu</option>
        <option value="GnBu_r">GnBu_r</option>
        <option value="Greens">Greens</option>
        <option value="Greens_r">Greens_r</option>
        <option value="Greys">Greys</option>
        <option value="Greys_r">Greys_r</option>
        <option value="OrRd">OrRd</option>
        <option value="OrRd_r">OrRd_r</option>
        <option value="Oranges">Oranges</option>
        <option value="Oranges_r">Oranges_r</option>
        <option value="PRGn">PRGn</option>
        <option value="PRGn_r">PRGn_r</option>
        <option value="Paired">Paired</option>
        <option value="Paired_r">Paired_r</option>
        <option value="Pastel1">Pastel1</option>
        <option value="Pastel1_r">Pastel1_r</option>
        <option value="Pastel2">Pastel2</option>
        <option value="Pastel2_r">Pastel2_r</option>
        <option value="PiYG">PiYG</option>
        <option value="PiYG_r">PiYG_r</option>
        <option value="PuBu">PuBu</option>
        <option value="PuBuGn">PuBuGn</option>
        <option value="PuBuGn_r">PuBuGn_r</option>
        <option value="PuBu_r">PuBu_r</option>
        <option value="PuOr">PuOr</option>
        <option value="PuOr_r">PuOr_r</option>
        <option value="PuRd">PuRd</option>
        <option value="PuRd_r">PuRd_r</option>
        <option value="Purples">Purples</option>
        <option value="Purples_r">Purples_r</option>
        <option value="RdBu">RdBu</option>
        <option value="RdBu_r">RdBu_r</option>
        <option value="RdGy">RdGy</option>
        <option value="RdPu">RdPu</option>
        <option value="RdPu_r">RdPu_r</option>
        <option value="RdYlBu">RdYlBu</option>
        <option value="RdYlBu_r">RdYlBu_r</option>
        <option value="RdYlGn">RdYlGn</option>
        <option value="RdYlGn_r">RdYlGn_r</option>
        <option value="Reds">Reds</option>
        <option value="Reds_r">Reds_r</option>
        <option value="Set1">Set1</option>
        <option value="Set1_r">Set1_r</option>
        <option value="Set2">Set2</option>
        <option value="Set2_r">Set2_r</option>
        <option value="Set3">Set3</option>
        <option value="Set3_r">Set3_r</option>
        <option value="Spectral">Spectral</option>
        <option value="Spectral_r">Spectral_r</option>
        <option value="Wistia">Wistia</option>
        <option value="Wistia_r">Wistia_r</option>
        <option value="YlGn">YlGn</option>
        <option value="YlGn_r">YlGn_r</option>
        <option value="YlGnBu">YlGnBu</option>
        <option value="YlGnBu_r">YlGnBu_r</option>
        <option value="YlOrBr">YlOrBr</option>
        <option value="YlOrBr_r">YlOrBr_r</option>
        <option value="YlOrRd">YlOrRd</option>
        <option value="YlOrRd_r">YlOrRd_r</option>
        <option value="afmhot">afmhot</option>
        <option value="afmhot_r">afmhot_r</option>
        <option value="autumn">autumn</option>
        <option value="autumn_r">autumn_r</option>
        <option value="binary">binary</option>
        <option value="binary_r">binary_r</option>
        <option value="bone">bone</option>
        <option value="bone_r">bone_r</option>
        <option value="brg">brg</option>
        <option value="brg_r">brg_r</option>
        <option value="bwr">bwr</option>
        <option value="bwr_r">bwr_r</option>
        <option value="cividis">cividis</option>
        <option value="cividis_r">cividis_r</option>
        <option value="cool">cool</option>
        <option value="cool_r">cool_r</option>
        <option value="coolwarm">coolwarm</option>
        <option value="coolwarm_r">coolwarm_r</option>
        <option value="copper">copper</option>
        <option value="copper_r">copper_r</option>
        <option value="cubehelix">cubehelix</option>
        <option value="cubehelix_r">cubehelix_r</option>
        <option value="flag">flag</option>
        <option value="flag_r">flag_r</option>
        <option value="gist_earth">gist_earth</option>
        <option value="gist_earth_r">gist_earth_r</option>
        <option value="gist_gray">gist_gray</option>
        <option value="gist_gray_r">gist_gray_r</option>
        <option value="gist_heat">gist_heat</option>
        <option value="gist_heat_r">gist_heat_r</option>
        <option value="gist_ncar">gist_ncar</option>
        <option value="gist_ncar_r">gist_ncar_r</option>
        <option value="gist_rainbow">gist_rainbow</option>
        <option value="gist_rainbow_r">gist_rainbow_r</option>
        <option value="gist_stern">gist_stern</option>
        <option value="gist_stern_r">gist_stern_r</option>
        <option value="gist_yarg">gist_yarg</option>
        <option value="gist_yarg_r">gist_yarg_r</option>
        <option value="gnuplot">gnuplot</option>
        <option value="gnuplot_r">gnuplot_r</option>
        <option value="gnuplot2">gnuplot2</option>
        <option value="gnuplot2_r">gnuplot2_r</option>
        <option value="gray">gray</option>
        <option value="gray_r">gray_r</option>
        <option value="hot">hot</option>
        <option value="hot_r">hot_r</option>
        <option value="hsv">hsv</option>
        <option value="hsv_r">hsv_r</option>
        <option value="icefire">icefire</option>
        <option value="icefire_r">icefire_r</option>
        <option value="inferno">inferno</option>
        <option value="inferno_r">inferno_r</option>
        <option value="jet">jet</option>
        <option value="jet_r">jet_r</option>
        <option value="magma">magma</option>
        <option value="magma_r">magma_r</option>
        <option value="mako">mako</option>
        <option value="mako_r">mako_r</option>
        <option value="nipy_spectral">nipy_spectral</option>
        <option value="nipy_spectral_r">nipy_spectral_r</option>
        <option value="ocean">ocean</option>
        <option value="ocean_r">ocean_r</option>
        <option value="pink">pink</option>
        <option value="pink_r">pink_r</option>
        <option value="plasma">plasma</option>
        <option value="plasma_r">plasma_r</option>
        <option value="prism">prism</option>
        <option value="prism_r">prism_r</option>
        <option value="rainbow">rainbow</option>
        <option value="rainbow_r">rainbow_r</option>
        <option value="rocket">rocket</option>
        <option value="rocket_r">rocket_r</option>
        <option value="seismic">seismic</option>
        <option value="seismic_r">seismic_r</option>
        <option value="spring">spring</option>
        <option value="spring_r">spring_r</option>
        <option value="summer">summer</option>
        <option value="summer_r">summer_r</option>
        <option value="tab10">tab10</option>
        <option value="tab10_r">tab10_r</option>
        <option value="tab20">tab20</option>
        <option value="tab20_r">tab20_r</option>
        <option value="tab20b">tab20b</option>
        <option value="tab20b_r">tab20b_r</option>
        <option value="tab20c">tab20c</option>
        <option value="tab20c_r">tab20c_r</option>
        <option value="terrain">terrain</option>
        <option value="terrain_r">terrain_r</option>
        <option value="twilight">twilight</option>
        <option value="twilight_r">twilight_r</option>
        <option value="twilight_shifted">twilight_shifted</option>
        <option value="twilight_shifted_r">twilight_shifted_r</option>
        <option value="viridis">viridis</option>
        <option value="viridis_r">viridis_r</option>
        <option value="vlag">vlag</option>
        <option value="vlag_r">vlag_r</option>
        <option value="winter">winter</option>
        <option value="winter_r">winter_r</option>
    </xml>
    <xml name="matplotlib_pyplot_colormap">
        <option value="viridis">viridis (Perceptually Uniform Sequential)</option>
        <option value="plasma">plasma (Perceptually Uniform Sequential)</option>
        <option value="inferno">inferno (Perceptually Uniform Sequential)</option>
        <option value="magma">magma (Perceptually Uniform Sequential)</option>
        <option value="cividis">cividis (Perceptually Uniform Sequential)</option>
        <option value="Greys">Greys (Sequential)</option>
        <option value="Purples">Purples (Sequential)</option>
        <option value="Blues">Blues (Sequential)</option>
        <option value="Greens">Greens (Sequential)</option>
        <option value="Oranges">Oranges (Sequential)</option>
        <option value="Reds">Reds (Sequential)</option>
        <option value="YlOrBr">YlOrBr (Sequential)</option>
        <option value="YlOrRd">YlOrRd (Sequential)</option>
        <option value="OrRd">OrRd (Sequential)</option>
        <option value="PuRd">PuRd (Sequential)</option>
        <option value="RdPu">RdPu (Sequential)</option>
        <option value="BuPu">BuPu (Sequential)</option>
        <option value="GnBu">GnBu (Sequential)</option>
        <option value="PuBu">PuBu (Sequential)</option>
        <option value="YlGnBu">YlGnBu (Sequential)</option>
        <option value="PuBuGn">PuBuGn (Sequential)</option>
        <option value="BuGn">BuGn (Sequential)</option>
        <option value="YlGn">YlGn (Sequential)</option>
        <option value="binary">binary (Sequential 2)</option>
        <option value="gist_yarg">gist_yarg (Sequential 2)</option>
        <option value="gist_gray">gist_gray (Sequential 2)</option>
        <option value="gray">gray (Sequential 2)</option>
        <option value="bone">bone (Sequential 2)</option>
        <option value="pink">pink (Sequential 2)</option>
        <option value="spring">spring (Sequential 2)</option>
        <option value="summer">summer (Sequential 2)</option>
        <option value="autumn">autumn (Sequential 2)</option>
        <option value="winter">winter (Sequential 2)</option>
        <option value="cool">cool (Sequential 2)</option>
        <option value="Wistia">Wistia (Sequential 2)</option>
        <option value="hot">hot (Sequential 2)</option>
        <option value="afmhot">afmhot (Sequential 2)</option>
        <option value="gist_heat">gist_heat (Sequential 2)</option>
        <option value="copper">copper (Sequential 2)</option>
        <option value="PiYG">PiYG (Diverging)</option>
        <option value="PRGn">PRGn (Diverging)</option>
        <option value="BrBG">BrBG (Diverging)</option>
        <option value="PuOr">PuOr (Diverging)</option>
        <option value="RdGy">RdGy (Diverging)</option>
        <option value="RdBu">RdBu (Diverging)</option>
        <option value="RdYlBu">RdYlBu (Diverging)</option>
        <option value="RdYlGn">RdYlGn (Diverging)</option>
        <option value="Spectral">Spectral (Diverging)</option>
        <option value="coolwarm">coolwarm (Diverging)</option>
        <option value="bwr">bwr (Diverging)</option>
        <option value="seismic">seismic (Diverging)</option>
        <option value="twilight">twilight (Cyclic)</option>
        <option value="twilight_shifted">twilight_shifted (Cyclic)</option>
        <option value="hsv">hsv (Cyclic)</option>
        <option value="Pastel1">Pastel1 (Qualitative)</option>
        <option value="Pastel2">Pastel2 (Qualitative)</option>
        <option value="Paired">Paired (Qualitative)</option>
        <option value="Accent">Accent (Qualitative)</option>
        <option value="Dark2">Dark2 (Qualitative)</option>
        <option value="Set1">Set1 (Qualitative)</option>
        <option value="Set2">Set2 (Qualitative)</option>
        <option value="Set3">Set3 (Qualitative)</option>
        <option value="tab10">tab10 (Qualitative)</option>
        <option value="tab20">tab20 (Qualitative)</option>
        <option value="tab20b">tab20b (Qualitative)</option>
        <option value="tab20c">tab20c (Qualitative)</option>
        <option value="flag">flag (Miscellaneous)</option>
        <option value="prism">prism (Miscellaneous)</option>
        <option value="ocean">ocean (Miscellaneous)</option>
        <option value="gist_earth">gist_earth (Miscellaneous)</option>
        <option value="terrain">terrain (Miscellaneous)</option>
        <option value="gist_stern">gist_stern (Miscellaneous)</option>
        <option value="gnuplot">gnuplot (Miscellaneous)</option>
        <option value="gnuplot2">gnuplot2 (Miscellaneous)</option>
        <option value="CMRmap">CMRmap (Miscellaneous)</option>
        <option value="cubehelix">cubehelix (Miscellaneous)</option>
        <option value="brg">brg (Miscellaneous)</option>
        <option value="gist_rainbow">gist_rainbow (Miscellaneous)</option>
        <option value="rainbow">rainbow (Miscellaneous)</option>
        <option value="jet">jet (Miscellaneous)</option>
        <option value="nipy_spectral">nipy_spectral (Miscellaneous)</option>
        <option value="gist_ncar">gist_ncar (Miscellaneous)</option>
    </xml>
    <xml name="param_groupby">
        <param argument="groupby" type="text" value="" optional="true" label="The key of the observation grouping to consider" help="If it is given, the heatmap is ordered by the respective group. It is expected that to be a categorical. If it is not a categorical observation, it would be subdivided into `num_categories`."/>
    </xml>
    <xml name="param_use_raw">
        <param argument="use_raw" type="boolean" truevalue="True" falsevalue="False" checked="false" label="Use `raw` attribute of input if present" help=""/>
    </xml>
    <xml name="param_log">
        <param argument="log" type="boolean" truevalue="True" falsevalue="False" checked="false" label="Use the log of the values?"/>
    </xml>
    <xml name="pl_figsize">
        <conditional name="figsize">
            <param name="test" type="select" label="Custom figure size" >
                <option value="yes">Yes</option>
                <option value="no" selected="true">No: the figure width is set based on the number of variable names and the height is set to 10.</option>
            </param>
            <when value="yes">
                <param argument="width" type="integer" min="0" value="10" label="Figure width" help=""/>
                <param argument="height" type="integer" min="0" value="10" label="Figure height" help=""/>
            </when>
            <when value="no"/>
        </conditional>
    </xml>
    <token name="@CMD_params_figsize@"><![CDATA[

    ]]></token>
    <xml name="pl_var_names">
        <conditional name="var_names">
            <param name="type" type="select" label="Variables to plot (columns of the heatmaps)" >
                <option value="all">All variables in `adata.var_names`</option>
                <option value="custom">Subset of variables in `adata.var_names`</option>
            </param>
            <when value="all"/>
            <when value="custom">
                <param argument="var_names" type="text" value="" label="List of variables to plot" help="They should be a valid subset of `adata.var_names`, and separated by comma"/>
            </when>
        </conditional>
    </xml>
    <xml name="param_num_categories">
        <param argument="num_categories" type="integer" min="0" value="7" label="Number of categories" help="It is only used if groupby observation is not categorical. This value determines the number of groups into which the groupby observation should be subdivided."/>
    </xml>
    <xml name="param_dendrogram">
        <param argument="dendrogram" type="boolean" truevalue="True" falsevalue="False" checked="false" label="Compute and plot a dendrogram?" help="groupby categories are reordered accoring to the dendrogram order. If groups of var_names are set and those groups correspond to the groupby categories, those groups are also reordered. The ‘person’ method is used to compute the pairwise correlation between categories using all var_names in raw if use_raw is None, otherwise all adata.var_names are used. The linkage method used is complete."/>
    </xml>
    <xml name="pl_var_group_positions">
        <repeat name="var_group_positions" title="Group of variables to highlight" help="This will draw a 'bracket' on top of the plot between the given start and end positions. If a label is given, it will be added on top of the bracket. ">
            <param name="start" type="integer" min="0" value="" label="Start" help=""/>
            <param name="end" type="integer" min="0" value="" label="End" help=""/>
            <param argument="label" type="text" value="" label="Label" help=""/>
        </repeat>
    </xml>
    <xml name="param_var_group_rotation">
        <param argument="var_group_rotation" type="float" value="" optional="true" label="Label rotation degrees" help="By default, labels larger than 4 characters are rotated 90 degrees"/>
    </xml>
    <xml name="param_layer">
        <param argument="layer" type="text" value="" label="Name of the AnnData object layer that wants to be plotted" help="By default `adata.raw.X` is plotted. If `use_raw=False` is set, then `adata.X` is plotted. If layer is set to a valid layer name, then the layer is plotted. layer takes precedence over `use_raw`."/>
    </xml>
    <token name="@CMD_param_plot_inputs@"><![CDATA[
    adata,
    save='.$format',
    show=False,
    ]]></token>
    <xml name="params_plots">
        <expand macro="pl_var_names"/>
        <expand macro="param_groupby"/>
        <expand macro="param_log"/>
        <expand macro="param_use_raw"/>
        <expand macro="param_num_categories"/>
        <expand macro="param_dendrogram"/>
        <expand macro="pl_var_group_positions"/>
        <expand macro="param_var_group_rotation"/>
        <expand macro="pl_figsize"/>
        <expand macro="param_layer"/>
    </xml>
    <token name="@CMD_params_plots@"><![CDATA[
#if $method.var_names.type == 'all'
    var_names=adata.var_names,
#else
    #set $var_names = ([x.strip() for x in str($method.var_names.var_names).split(',')])
    var_names=$var_names,
#end if
#if str($method.groupby) != ''
    groupby='$method.groupby',
#end if
    log=$method.log,
    use_raw=$method.use_raw,
    num_categories=$method.num_categories,
    dendrogram=$method.dendrogram,
    #if len($method.var_group_positions) > 0:
        #set $var_group_positions=[]
        #set $var_group_labels=[]
        #for $i, $s in enumerate($method.var_group_positions)
            #silent $var_group_positions.append((int($s.start), int($s.end)))
            #silent $var_group_labels.append(str($s.label))
        #end for
    var_group_positions=$var_group_positions,
    var_group_labels=$var_group_labels,
    #end if
#if $method.var_group_rotation
    var_group_rotation=$method.var_group_rotation,
#end if
#if $method.figsize.test == 'yes'
    figsize=($method.figsize.width, $method.figsize.height),
#end if
#if $method.layer != ''
    layer='$method.layer',
#end if
    ]]></token>
    <xml name="matplotlib_color">
        <option value="AliceBlue">AliceBlue</option>
        <option value="AntiqueWhite">AntiqueWhite</option>
        <option value="Aqua">Aqua</option>
        <option value="Aquamarine">Aquamarine</option>
        <option value="Azure">Azure</option>
        <option value="Beige">Beige</option>
        <option value="Bisque">Bisque</option>
        <option value="Black">Black</option>
        <option value="BlanchedAlmond">BlanchedAlmond</option>
        <option value="Blue">Blue</option>
        <option value="BlueViolet">BlueViolet</option>
        <option value="Brown">Brown</option>
        <option value="BurlyWood">BurlyWood</option>
        <option value="CadetBlue">CadetBlue</option>
        <option value="Chartreuse">Chartreuse</option>
        <option value="Chocolate">Chocolate</option>
        <option value="Coral">Coral</option>
        <option value="CornflowerBlue">CornflowerBlue</option>
        <option value="Cornsilk">Cornsilk</option>
        <option value="Crimson">Crimson</option>
        <option value="Cyan">Cyan</option>
        <option value="DarkBlue">DarkBlue</option>
        <option value="DarkCyan">DarkCyan</option>
        <option value="DarkGoldenRod">DarkGoldenRod</option>
        <option value="DarkGray">DarkGray</option>
        <option value="DarkGrey">DarkGrey</option>
        <option value="DarkGreen">DarkGreen</option>
        <option value="DarkKhaki">DarkKhaki</option>
        <option value="DarkMagenta">DarkMagenta</option>
        <option value="DarkOliveGreen">DarkOliveGreen</option>
        <option value="DarkOrange">DarkOrange</option>
        <option value="DarkOrchid">DarkOrchid</option>
        <option value="DarkRed">DarkRed</option>
        <option value="DarkSalmon">DarkSalmon</option>
        <option value="DarkSeaGreen">DarkSeaGreen</option>
        <option value="DarkSlateBlue">DarkSlateBlue</option>
        <option value="DarkSlateGray">DarkSlateGray</option>
        <option value="DarkSlateGrey">DarkSlateGrey</option>
        <option value="DarkTurquoise">DarkTurquoise</option>
        <option value="DarkViolet">DarkViolet</option>
        <option value="DeepPink">DeepPink</option>
        <option value="DeepSkyBlue">DeepSkyBlue</option>
        <option value="DimGray">DimGray</option>
        <option value="DimGrey">DimGrey</option>
        <option value="DodgerBlue">DodgerBlue</option>
        <option value="FireBrick">FireBrick</option>
        <option value="FloralWhite">FloralWhite</option>
        <option value="ForestGreen">ForestGreen</option>
        <option value="Fuchsia">Fuchsia</option>
        <option value="Gainsboro">Gainsboro</option>
        <option value="GhostWhite">GhostWhite</option>
        <option value="Gold">Gold</option>
        <option value="GoldenRod">GoldenRod</option>
        <option value="Gray">Gray</option>
        <option value="Grey">Grey</option>
        <option value="Green">Green</option>
        <option value="GreenYellow">GreenYellow</option>
        <option value="HoneyDew">HoneyDew</option>
        <option value="HotPink">HotPink</option>
        <option value="IndianRed">IndianRed</option>
        <option value="Indigo">Indigo</option>
        <option value="Ivory">Ivory</option>
        <option value="Khaki">Khaki</option>
        <option value="Lavender">Lavender</option>
        <option value="LavenderBlush">LavenderBlush</option>
        <option value="LawnGreen">LawnGreen</option>
        <option value="LemonChiffon">LemonChiffon</option>
        <option value="LightBlue">LightBlue</option>
        <option value="LightCoral">LightCoral</option>
        <option value="LightCyan">LightCyan</option>
        <option value="LightGoldenRodYellow">LightGoldenRodYellow</option>
        <option value="LightGray">LightGray</option>
        <option value="LightGrey">LightGrey</option>
        <option value="LightGreen">LightGreen</option>
        <option value="LightPink">LightPink</option>
        <option value="LightSalmon">LightSalmon</option>
        <option value="LightSeaGreen">LightSeaGreen</option>
        <option value="LightSkyBlue">LightSkyBlue</option>
        <option value="LightSlateGray">LightSlateGray</option>
        <option value="LightSlateGrey">LightSlateGrey</option>
        <option value="LightSteelBlue">LightSteelBlue</option>
        <option value="LightYellow">LightYellow</option>
        <option value="Lime">Lime</option>
        <option value="LimeGreen">LimeGreen</option>
        <option value="Linen">Linen</option>
        <option value="Magenta">Magenta</option>
        <option value="Maroon">Maroon</option>
        <option value="MediumAquaMarine">MediumAquaMarine</option>
        <option value="MediumBlue">MediumBlue</option>
        <option value="MediumOrchid">MediumOrchid</option>
        <option value="MediumPurple">MediumPurple</option>
        <option value="MediumSeaGreen">MediumSeaGreen</option>
        <option value="MediumSlateBlue">MediumSlateBlue</option>
        <option value="MediumSpringGreen">MediumSpringGreen</option>
        <option value="MediumTurquoise">MediumTurquoise</option>
        <option value="MediumVioletRed">MediumVioletRed</option>
        <option value="MidnightBlue">MidnightBlue</option>
        <option value="MintCream">MintCream</option>
        <option value="MistyRose">MistyRose</option>
        <option value="Moccasin">Moccasin</option>
        <option value="NavajoWhite">NavajoWhite</option>
        <option value="Navy">Navy</option>
        <option value="OldLace">OldLace</option>
        <option value="Olive">Olive</option>
        <option value="OliveDrab">OliveDrab</option>
        <option value="Orange">Orange</option>
        <option value="OrangeRed">OrangeRed</option>
        <option value="Orchid">Orchid</option>
        <option value="PaleGoldenRod">PaleGoldenRod</option>
        <option value="PaleGreen">PaleGreen</option>
        <option value="PaleTurquoise">PaleTurquoise</option>
        <option value="PaleVioletRed">PaleVioletRed</option>
        <option value="PapayaWhip">PapayaWhip</option>
        <option value="PeachPuff">PeachPuff</option>
        <option value="Peru">Peru</option>
        <option value="Pink">Pink</option>
        <option value="Plum">Plum</option>
        <option value="PowderBlue">PowderBlue</option>
        <option value="Purple">Purple</option>
        <option value="RebeccaPurple">RebeccaPurple</option>
        <option value="Red">Red</option>
        <option value="RosyBrown">RosyBrown</option>
        <option value="RoyalBlue">RoyalBlue</option>
        <option value="SaddleBrown">SaddleBrown</option>
        <option value="Salmon">Salmon</option>
        <option value="SandyBrown">SandyBrown</option>
        <option value="SeaGreen">SeaGreen</option>
        <option value="SeaShell">SeaShell</option>
        <option value="Sienna">Sienna</option>
        <option value="Silver">Silver</option>
        <option value="SkyBlue">SkyBlue</option>
        <option value="SlateBlue">SlateBlue</option>
        <option value="SlateGray">SlateGray</option>
        <option value="SlateGrey">SlateGrey</option>
        <option value="Snow">Snow</option>
        <option value="SpringGreen">SpringGreen</option>
        <option value="SteelBlue">SteelBlue</option>
        <option value="Tan">Tan</option>
        <option value="Teal">Teal</option>
        <option value="Thistle">Thistle</option>
        <option value="Tomato">Tomato</option>
        <option value="Turquoise">Turquoise</option>
        <option value="Violet">Violet</option>
        <option value="Wheat">Wheat</option>
        <option value="White">White</option>
        <option value="WhiteSmoke">WhiteSmoke</option>
        <option value="Yellow">Yellow</option>
        <option value="YellowGreen">YellowGreen</option>
    </xml>
    <xml name="param_matplotlib_pyplot_edgecolors">
        <param argument="edgecolors" type="select" label="Edge color of the marker" help="">
            <option value="face">The edge color will always be the same as the face color</option>
            <option value="none">No patch boundary will be drawn</option>
            <expand macro="matplotlib_color"/>
        </param>
    </xml>
    <xml name="param_alpha">
        <param argument="alpha" type="float" value="" min="0" max="1" optional="true" label="Alpha blending value" help="Between 0 (transparent) and 1 (opaque)"/>
    </xml>
    <xml name="param_vmin">
        <param argument="vmin" type="float" value="" optional="true" label="Minimum value to normalize luminance data" help="If not set, it is inferred from the data and other keyword arguments"/>
    </xml>
    <xml name="param_vmax">
        <param argument="vmax" type="float" value="" optional="true" label="Maximum value to normalize luminance data" help="If not set, it is inferred from the data and other keyword arguments"/>
    </xml>    
    <xml name="section_matplotlib_pyplot_scatter">
        <section name="matplotlib_pyplot_scatter" title="Parameters for matplotlib.pyplot.scatter">
            <!--<param argument="marker" type="select" label="Marker style" help="">
                <option value="o">o</option>
                <option value="v">v</option>
                <option value="^">^</option>
                <option value="8">8</option>
                <option value="s">s</option>
                <option value="p">p</option>
                <option value="*">*</option>
                <option value="h">h</option>
                <option value="H">H</option>
                <option value="D">D</option>
                <option value="d">d</option>
                <option value="P">P</option>
                <option value="X">X</option>
            </param>-->
            <expand macro="param_alpha"/>
            <expand macro="param_vmin"/>
            <expand macro="param_vmax"/>
            <param argument="linewidths" type="float" value="0" label="Linewidth of the marker edges" help=""/>
            <expand macro="param_matplotlib_pyplot_edgecolors"/>
        </section>
    </xml>
    <token name="@CMD_params_matplotlib_pyplot_scatter@"><![CDATA[
    #if $method.matplotlib_pyplot_scatter.vmin
    vmin=$method.matplotlib_pyplot_scatter.vmin,
    #end if
    #if $method.matplotlib_pyplot_scatter.vmax
    vmax=$method.matplotlib_pyplot_scatter.vmax,
    #end if
    #if $method.matplotlib_pyplot_scatter.alpha
    alpha=$method.matplotlib_pyplot_scatter.alpha,
    #end if
    linewidths=$method.matplotlib_pyplot_scatter.linewidths,
    edgecolors='$method.matplotlib_pyplot_scatter.edgecolors'
    ]]></token>
    <xml name="conditional_stripplot">
        <conditional name="stripplot">
            <param argument="stripplot" type="select" label="Add a stripplot on top of the violin plot" help="">
                <option value="True">Yes</option>
                <option value="False">No</option>
            </param>
            <when value="True">
                <conditional name="jitter">
                    <param argument="jitter" type="select" label="Add a jitter to the stripplot" help="">
                        <option value="True">Yes</option>
                        <option value="False">No</option>
                    </param>
                    <when value="True">
                        <param argument="size" type="integer" min="0" value="1" label="Size of the jitter points" help=""/>
                    </when>
                    <when value="False"/>
                </conditional>
            </when>
            <when value="False"/>
        </conditional>
    </xml>
    <token name="@CMD_conditional_stripplot@"><![CDATA[
    stripplot=$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
    ]]></token>
    <xml name="param_scale">
        <param argument="scale" type="select" label="Method used to scale the width of each violin">
            <option value="area">area: each violin will have the same area</option>
            <option value="count">count: the width of the violins will be scaled by the number of observations in that bin</option>
            <option value="width" selected="true">width: each violin will have the same width</option>
        </param>
    </xml>
    <token name="@CMD_params_violin_plots@"><![CDATA[
    stripplot=$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
    multi_panel=$method.violin_plot.multi_panel.multi_panel, 
#if $method.multi_panel.violin_plot.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
    scale='$method.violin_plot.scale',
    ]]></token>
    <xml name="seaborn_violinplot">
        <section name="seaborn_violinplot" title="Parameters for seaborn.violinplot">
            <param argument="bw" type="select" label="Name of a reference rule when computing the kernel bandwidth">
                <option value="scott">scott</option>
                <option value="silverman">silverman</option>
            </param>
            <param argument="orient" type="select" optional="true" label="Orientation of the plot">
                <option value="v">vertical</option>
                <option value="h">horizontal</option>
            </param>
            <param argument="linewidth" type="float" value="0" label="Width of the gray lines that frame the plot elements" help=""/>
            <param argument="color" type="select" label="Color for all of the elements" help="">
                <expand macro="matplotlib_color"/>
            </param>
            <param argument="palette" type="select" label="Colors to use for the different levels of the hue variable" help="">
                <expand macro="matplotlib_pyplot_colormap"/>
            </param>
            <param argument="saturation" type="float" value="0.75" min="0" max="1" label="Proportion of the original saturation to draw colors at" help=""/>
        </section>
    </xml>
    <token name="@CMD_params_seaborn_violinplot@"><![CDATA[
    bw='$method.seaborn_violinplot.bw',
#if $method.seaborn_violinplot.orient
    orient='$method.seaborn_violinplot.orient',
#end if
    linewidth=$method.seaborn_violinplot.linewidth,
    color='$method.seaborn_violinplot.color',
    palette='$method.seaborn_violinplot.palette',
    saturation=$method.seaborn_violinplot.saturation,
    ]]></token>
    <xml name="param_color">
        <param argument="color" type="text" value="" optional="true" label="Keys for annotations of observations/cells or variables/genes" help="One or a list of comma-separated index or key from either `.obs` or `.var`"/>
    </xml>
    <token name="@CMD_param_color@"><![CDATA[
#if str($method.color) != ''
    #set $color = ([x.strip() for x in str($method.color).split(',')])
    color=$color,
#end if
    ]]></token>
    <xml name="pl_groups">
        <param argument="groups" type="text" value="" optional="true" label="Categorical observation annotations, comma-separated" help=""/>
    </xml>
    <token name="@CMD_params_pl_groups@"><![CDATA[
#if str($method.groups) != ''
    #set $groups=([x.strip() for x in str($method.groups).split(',')])
    groups=$groups,
#end if
    ]]></token>
    <xml name="pl_components">
        <repeat name="components" title="Component">
            <param argument="axis1" type="text" value="1" label="Axis 1" help=""/>
            <param argument="axis2" type="text" value="2" label="Axis 2" help=""/>
        </repeat>
    </xml>
    <token name="@CMD_params_pl_components@"><![CDATA[
#if len($method.plot.components) > 0
    #set $components=[]
    #for $i, $s in enumerate($method.plot.components)
        #silent $components.append(str($s.axis1) + ',' + str($s.axis2))
    #end for
    components=$components,
#end if
    ]]>
    </token>
    <xml name="param_projection">
        <param argument="projection" type="select" label="Projection of plot" help="">
            <option value="2d">2d</option>
            <option value="3d">3d</option>
        </param>
    </xml>
    <xml name="param_legend_loc">
        <param argument="legend_loc" type="select" label="Location of legend" help="">
            <option value="none">none</option>
            <option value="right margin" selected="true">right margin</option>
            <option value="on data">on data</option>
            <option value="on data export">on data export</option>
            <option value="best">best</option>
            <option value="upper right">upper right</option>
            <option value="upper left">upper left</option>
            <option value="lower left">lower left</option>
            <option value="lower right">lower right</option>
            <option value="center left">center left</option>
            <option value="center right">center right</option>
            <option value="lower center">lower center</option>
            <option value="upper center">upper center</option>
            <option value="center">center</option>
        </param>
    </xml>
    <xml name="param_legend_fontsize">
        <param argument="legend_fontsize" type="integer" optional="true" value="" label="Legend font size" help=""/>
    </xml>
    <xml name="param_legend_fontweight">
        <param argument="legend_fontweight" type="select" label="Legend font weight" help="">
            <option value="light">light</option>
            <option value="normal" selected="true">normal</option>
            <option value="medium">medium</option>
            <option value="semibold">semibold</option>
            <option value="bold">bold</option>
            <option value="heavy">heavy</option>
            <option value="black">black</option>
        </param>
    </xml>
    <xml name="param_palette">
        <param argument="palette" type="select" label="Colors to use for plotting g categorical annotation groups" help="">
            <expand macro="matplotlib_pyplot_colormap"/>
        </param>
    </xml>
    <xml name="param_color_map">
        <param argument="color_map" type="select" label="Colors to use for plotting categorical annotation groups" help="">
            <expand macro="matplotlib_pyplot_colormap"/>
        </param>
    </xml>
    <xml name="param_frameon">
        <param argument="frameon" type="boolean" truevalue="True" falsevalue="False" checked="true" label="Draw a frame around the scatter plot?" help=""/>
    </xml>
    <xml name="param_right_margin">
        <param argument="right_margin" type="float" value="1" label="Width of the space right of each plotting panel" help=""/>
    </xml>
    <xml name="param_left_margin">
        <param argument="left_margin" type="float" value="1" label="Width of the space left of each plotting panel" help=""/>
    </xml>
    <xml name="param_size">
        <param argument="size" type="float" optional="true" value="" label="Point size" help=""/>
    </xml>
    <xml name="param_title">
        <param argument="title" type="text" value="" optional="true" label="Title for panels" help="Titles must be separated by a comma"/>
    </xml>
    <xml name="param_sort_order">
        <param argument="sort_order" type="boolean" truevalue="True" falsevalue="False" checked="true" label="Sort order?" help="For continuous annotations used as color parameter, plot data points with higher values on top of others."/>
    </xml>
    <xml name="param_sort_order">
        <param argument="sort_order" type="boolean" truevalue="True" falsevalue="False" checked="true" label="Sort order?" help="For continuous annotations used as color parameter, plot data points with higher values on top of others."/>
    </xml>
    <xml name="param_ncols">
        <param argument="ncols" type="integer" min="0" value="4" label="Number of panels per row" help=""/>
    </xml>
    <xml name="param_wspace">
        <param argument="wspace" type="float" min="0" value="0.1" label="Width of the space between multiple panels" help=""/>
    </xml>
    <xml name="param_hspace">
        <param argument="hspace" type="float" min="0" value="0.25" label="Geight of the space between multiple panels" help=""/>
    </xml>
    <xml name="pl_edges">
        <conditional name="edges">
            <param argument="edges" type="select" label="Show edges?">
                <option value="True">Yes</option>
                <option value="False" selected="true">No</option>
            </param>
            <when value="True">
                <param argument="edges_width" type="float" min="0" value="0.1" label="Width of edges"/>
                <param argument="edges_color" type="select" label="Color of edges">
                    <expand macro="matplotlib_color"/>
                </param>
            </when>
            <when value="False"/>
        </conditional>
    </xml>
    <token name="@CMD_pl_edges@"><![CDATA[
#if str($method.edges.edges) == 'True'
    edges=True,
    edges_width=$method.edges.edges_width,
    edges_color='$method.edges.edges_color',
#else
    edges=False,
#end if
    ]]>
    </token>
    <xml name="param_arrows">
        <param argument="arrows" type="boolean" truevalue="True" falsevalue="False" checked="false" label="Show arrows?" help="It requires to run `tl.rna_velocity` before."/>
    </xml>
    <xml name="param_cmap">
        <param argument="cmap" type="select" label="Colors to use for plotting categorical annotation groups" help="">
            <expand macro="matplotlib_pyplot_colormap"/>
        </param>
    </xml>
    <xml name="pl_attribute_section">
        <section name="plot" title="Plot attributes">
            <expand macro="pl_components"/>
            <expand macro="param_projection"/>
            <expand macro="param_legend_loc"/>
            <expand macro="param_legend_fontsize"/>
            <expand macro="param_legend_fontweight"/>
            <expand macro="param_size"/>
            <expand macro="param_palette"/>
            <expand macro="param_frameon"/>
            <expand macro="param_ncols"/>
            <expand macro="param_wspace"/>
            <expand macro="param_hspace"/>
            <expand macro="param_title"/>
        </section>
    </xml>
    <token name="@CMD_pl_attribute_section@"><![CDATA[
    projection='$method.plot.projection',
    legend_loc='$method.plot.legend_loc',
    #if str($method.plot.legend_fontsize) != ''
    legend_fontsize=$method.plot.legend_fontsize,
    #end if
    legend_fontweight='$method.plot.legend_fontweight',
    #if str($method.plot.size) != ''
    size=$method.plot.size,
    #end if
    palette='$method.plot.palette',
    frameon=$method.plot.frameon,
    ncols=$method.plot.ncols,
    wspace=$method.plot.wspace,
    hspace=$method.plot.hspace,
    #if $method.plot.title
    title='$method.plot.title',
    #end if
    ]]>
    </token>
    <xml name="options_layout">
        <option value="fa">fa: ForceAtlas2</option>
        <option value="fr">fr: Fruchterman-Reingold</option>
        <option value="grid_fr">grid_fr: Grid Fruchterman Reingold, faster than "fr"</option>
        <option value="kk">kk: Kamadi Kawai’, slower than "fr"</option>
        <option value="drl">drl: Distributed Recursive Layout, pretty fast</option>
        <option value="rt">rt: Reingold Tilford tree layout</option>
        <option value="eq_tree">eq_tree: Equally spaced tree</option>
    </xml>
    <xml name="param_layout">
        <param argument="layout" type="select" label="Plotting layout" help="">
            <expand macro="options_layout"/>
        </param>
    </xml>
    <xml name="param_root">
        <param argument="root" type="text" value="" label="Comma-separated roots" help="If choosing a tree layout, this is the index of the root node or a list of root node indices. If this is a non-empty vector then the supplied node IDs are used as the roots of the trees (or a single tree if the graph is connected). If this is `None` or an empty list, the root vertices are automatically calculated based on topological sorting."/>
    </xml>
    <xml name="param_random_state">
        <param argument="random_state" type="integer" value="0" label="Random state" help="For layouts with random initialization like 'fr', change this to use different intial states for the optimization. If `None`, the initial state is not reproducible."/>
    </xml>
    <xml name="inputs_paga">
        <param argument="threshold" type="float" min="0" value="0.01" label="Threshold to draw edges" help="Do not draw edges for weights below this threshold. Set to 0 if you want all edges. Discarding low-connectivity edges helps in getting a much clearer picture of the graph."/>
        <expand macro="pl_groups"/>
        <param argument="color" type="text" value="" label="The node colors" help="Gene name or obs. annotation, and also plots the degree of the abstracted graph when passing 'degree_dashed', 'degree_solid'."/>
        <param argument="pos" type="data" format="tabular,csv,tsv" optional="true" label="Two-column tabular file storing the x and y coordinates for drawing" help=""/>
        <param argument="labels" type="text" value="" label="Comma-separated node labels" help="If none is provided, this defaults to the group labels stored in the categorical for which `tl.paga` has been computed."/>
        <expand macro="param_layout"/>
        <param argument="init_pos" type="data" format="tabular,csv,tsv" optional="true" label="Two-column tabular file storing the x and y coordinates for initializing the layout" help=""/>
        <expand macro="param_random_state"/>
        <expand macro="param_root"/>
        <param argument="transitions" type="text" value="" label="Key corresponding to the matrix storing the arrows" help="Key for `.uns['paga']`, e.g. 'transistions_confidence'"/>
        <param argument="solid_edges" type="text" value="connectivities" label="Key corresponding to the matrix storing the edges to be drawn solid black" help="Key for uns/paga"/>
        <param argument="dashed_edges" type="text" value="" optional="true" label="Key corresponding to the matrix storing the edges to be drawn dashed grey" help="Key for uns/paga. If not set, no dashed edges are drawn."/>
        <param argument="single_component" type="boolean" truevalue="True" falsevalue="False" checked="false" label="Restrict to largest connected component?" help=""/>
        <param argument="fontsize" type="integer" min="0" value="1" label="Font size for node labels" help=""/>
        <param argument="node_size_scale" type="float" min="0" value="1.0" label="Size of the nodes" help=""/>
        <param argument="node_size_power" type="float" min="0" value="0.5" label="Power with which groups sizes influence the radius of the nodes" help=""/>
        <param argument="edge_width_scale" type="float" min="0" value="5" label="Scale for edge width" help=""/>
        <param argument="min_edge_width" type="float" min="0" value="" optional="true" label="Min width of solid edges" help=""/>
        <param argument="max_edge_width" type="float" min="0" value="" optional="true" label="Max width of solid and dashed edges" help=""/>
        <param argument="arrowsize" type="integer" min="0" value="30" label="Arrow size" help="For directed graphs, choose the size of the arrow head head's length and width."/>
        <param argument="normalize_to_color" type="boolean" truevalue="True" falsevalue="False" checked="false" label="Normalize categorical plots to color or the underlying grouping?" help=""/>
        <expand macro="param_cmap"/>
        <expand macro="param_title"/>
        <expand macro="param_frameon"/>
    </xml>
    <token name="@CMD_params_pl_paga@"><![CDATA[
    threshold=$method.threshold,
#if str($method.groups) != ''
    #set $groups=([x.strip() for x in str($method.groups).split(',')])
    groups=$groups,
#end if
#if str($method.color) != ''
    #set $color=([x.strip() for x in str($method.color).split(',')])
    color=$color,
#end if
#if $method.pos
    pos=np.fromfile($method.pos, dtype=dt),
#end if
#if str($method.labels) != ''
    #set $labels=([x.strip() for x in str($method.labels).split(',')])
    labels=$labels,
#end if
    layout='$method.layout',
#if $method.init_pos
    init_pos=np.fromfile($method.init_pos, dtype=dt),
#end if
    random_state=$method.random_state,
#if str($method.root) != ''
    #set $root=([int(x.strip()) for x in str($method.root).split(',')])
    root=$root,
#end if
#if $method.transitions
    transitions='$method.transitions',
#end if
    solid_edges='$method.solid_edges',
#if $method.dashed_edges
    dashed_edges='$method.dashed_edges',
#end if
    single_component=$method.single_component,
    fontsize=$method.fontsize,
    node_size_scale=$method.node_size_scale,
    node_size_power=$method.node_size_power,
    edge_width_scale=$method.edge_width_scale,
#if $method.min_edge_width
    min_edge_width=$method.min_edge_width,
#end if
#if $method.max_edge_width
    max_edge_width=$method.max_edge_width,
#end if
    arrowsize=$method.arrowsize,
    normalize_to_color=$method.normalize_to_color,
    cmap='$method.cmap',
#if $method.title
    title='$method.title',
#end if
    frameon=$method.frameon,
    ]]>
    </token>
    <xml name="param_swap_axes">
        <param argument="swap_axes" type="boolean" truevalue="True" falsevalue="False" checked="false" label="Swap axes?" help="By default, the x axis contains `var_names` (e.g. genes) and the y axis the `groupby` categories (if any). By setting `swap_axes` then x are the `groupby` categories and y the `var_names`."/>
    </xml>
    <xml name="gene_symbols">
        <param argument="gene_symbols" type="text" value="" optional="true" label="Key for field in `.var` that stores gene symbols"/>
    </xml>
    <xml name="n_genes">
        <param argument="n_genes" type="integer" min="0" value="20" label="Number of genes to show" help=""/>
    </xml>               
</macros>