changeset 20:387671174a49 draft default tip

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/main/tools/scanpy commit 732303de9670376c88e7afb2f23336ee1433e97d
author iuc
date Thu, 26 Mar 2026 12:48:53 +0000
parents fc222791d03c
children
files macros.xml plot.xml test-data/pl.heatmap.krumsiek11.png test-data/pl.rank_genes_groups_heatmap.rank_genes_groups.krumsiek11.png test-data/pl.rank_genes_groups_stacked_violin.rank_genes_groups.krumsiek11.png test-data/pl.scatter.krumsiek11.png test-data/pl.scatter.pbmc68k_reduced.png test-data/pl.scatter.pbmc68k_reduced_n_genes_n_counts.png test-data/pl.scatter.umap.pbmc68k_reduced.png test-data/pl.stacked_violin.krumsiek11.png test-data/pl.stacked_violin_pp.filter_genes_dispersion.krumsiek11-seurat.png
diffstat 11 files changed, 230 insertions(+), 74 deletions(-) [+]
line wrap: on
line diff
--- a/macros.xml	Wed Dec 03 10:01:11 2025 +0000
+++ b/macros.xml	Thu Mar 26 12:48:53 2026 +0000
@@ -1,16 +1,12 @@
 <macros>
-    <token name="@TOOL_VERSION@">1.10.2</token>
-    <token name="@VERSION_SUFFIX@">3</token>
+    <token name="@TOOL_VERSION@">1.11.5</token>
+    <token name="@VERSION_SUFFIX@">0</token>
     <token name="@PROFILE@">21.09</token>
     <xml name="requirements">
         <requirements>
             <requirement type="package" version="@TOOL_VERSION@">scanpy</requirement>
-            <requirement type="package" version="0.10.3">anndata</requirement>
-            <requirement type="package" version="1.26.4">numpy</requirement>
-            <requirement type="package" version="2.2.2">pandas</requirement>
-            <requirement type="package" version="1.14.1">scipy</requirement>
-            <requirement type="package" version="0.14.2">statsmodels</requirement>
-            <requirement type="package" version="0.3.5">fa2</requirement>
+            <requirement type="package" version="0.11.4">anndata</requirement>
+            <requirement type="package" version="0.4">fa2_modified</requirement>
             <yield />
         </requirements>
     </xml>
@@ -27,11 +23,11 @@
     <xml name="citations">
         <citations>
             <citation type="doi">10.1186/s13059-017-1382-0</citation>
+            <citation type="doi">10.1016/j.xgen.2025.101005</citation>
             <citation type="doi">10.1093/gigascience/giaa102</citation>
         </citations>
     </xml>
 
-
     <!-- param macros -->
     <xml name="sanitize_query" token_validinitial="string.printable">
         <sanitizer>
@@ -566,7 +562,6 @@
 cp '$adata' 'anndata.h5ad' &&
 cat '$script_file' > '$hidden_output' &&
 python '$script_file' >> '$hidden_output' &&
-ls . >> '$hidden_output' &&
 touch 'anndata_info.txt' &&
 cat 'anndata_info.txt' @CMD_PRETTIFY_STDOUT@
     ]]>
@@ -1451,7 +1446,46 @@
     ]]>
     </token>
 
+    <xml name="param_interactive_plot">
+        <param name="interactive_plot" type="boolean" checked="false" label="Make an interactive plot?" help="Creates a vitessce configuration file using easy_vitessce for interactive visualization"/>
+    </xml>
 
+    <token name="@VITESSCE_ACTIVATE@"><![CDATA[
+import easy_vitessce as ev
+ev.configure_plots(enable_plots=["pca", "umap", "tsne", "diffmap", "violin", "embedding", "dotplot", "heatmap"])
+ev.config.update({"data": {"anndata_format": "h5ad"}})
+ev.config.update({"data": {"out_dir": "."}})
+ev.register_data_path(adata, 'anndata.h5ad')
+    ]]>
+    </token>
+    <token name="@VITESSCE_CONFIG@"><![CDATA[
+import json
+## while testing locally check galaxy_infrastructure_url is whether http://localhost:8080 or http://127.0.0.1:8080
+## use the correct URL to access datasets via Galaxy API
+galaxy_url = "${__app__.config.galaxy_infrastructure_url}"
+anndata_out_id = "${__app__.security.encode_id($anndata_out.id)}"
+anndata_config_id = "${__app__.security.encode_id($anndata_config.id)}"
+
+## vitessce_widget is returned from sc.pl when the interactive_plot parameter is set to True
+config_dict = vitessce_widget.config.to_dict(base_url="")
+for dataset in config_dict.get('datasets', []):
+    for file in dataset.get('files', []):
+        if 'url' in file:
+            file['url'] = f"{galaxy_url}/api/datasets/{anndata_out_id}/display"
+        if 'options' in file and 'refSpecUrl' in file['options']:
+            file['options']['refSpecUrl'] = f"{galaxy_url}/api/datasets/{anndata_config_id}/display"
+
+config_js_content = f"""
+export const config = {json.dumps(config_dict, indent=2)};
+"""
+
+with open("config.js", "w") as f:
+    f.write(config_js_content)
+
+with open("config.json", "w") as f:
+    json.dump(config_dict, f, indent=2)
+]]>
+    </token>
     <!-- unused macros -->
     <!-- <xml name="param_right_margin">
         <param argument="right_margin" type="float" value="1" label="Width of the space right of each plotting panel"/>
@@ -1459,4 +1493,4 @@
     <xml name="param_left_margin">
         <param argument="left_margin" type="float" value="1" label="Width of the space left of each plotting panel"/>
     </xml> -->
-</macros>
+</macros>
\ No newline at end of file
--- a/plot.xml	Wed Dec 03 10:01:11 2025 +0000
+++ b/plot.xml	Thu Mar 26 12:48:53 2026 +0000
@@ -4,9 +4,13 @@
     </macros>
     <expand macro="bio_tools"/>
     <expand macro="requirements">
-        <requirement type="package" version="3.9.1">matplotlib</requirement>
-        <requirement type="package" version="0.13.2">seaborn</requirement>
+        <requirement type="package" version="2.3.3">pandas</requirement>
         <requirement type="package" version="0.11.6">python-igraph</requirement>
+        <requirement type="package" version="0.0.9">easy_vitessce</requirement>
+        <requirement type="package" version="0.51.0">starlette</requirement>
+        <requirement type="package" version="0.2.7">kerchunk</requirement>
+        <requirement type="package" version="0.9.21">anywidget</requirement>
+        <requirement type="package" version="0.40.0">uvicorn</requirement>
     </expand>
     <stdio>
         <regex match="... storing" source="stderr" level="warning"/>
@@ -22,6 +26,10 @@
 
 sc.settings.figdir = '.'
 
+#if str($method.method) in ['pl.pca', 'pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and $method.interactive_plot:
+@VITESSCE_ACTIVATE@
+#end if
+
 #if str($method.method) == 'pl.scatter':
 
     #if str($method.type.type) == 'xy':
@@ -86,7 +94,11 @@
 
 #else if str($method.method) == 'pl.heatmap':
 @CMD_VAR_NAMES_HEADER_CHECK@
+    #if $method.interactive_plot:
+vitessce_widget = sc.pl.heatmap(
+    #else:
 sc.pl.heatmap(
+    #end if
     @CMD_PARAM_PLOT_INPUTS@
     @CMD_PARAMS_INPUTS@
     @CMD_PARAM_GENE_SYMBOLS@
@@ -96,7 +108,11 @@
 
 #else if str($method.method) == 'pl.dotplot':
 @CMD_VAR_NAMES_HEADER_CHECK@
+    #if $method.interactive_plot:
+vitessce_widget = sc.pl.dotplot(
+    #else:
 sc.pl.dotplot(
+    #end if
     @CMD_PARAM_PLOT_INPUTS@
     @CMD_PARAMS_INPUTS@
     @CMD_PARAM_GENE_SYMBOLS@
@@ -114,7 +130,11 @@
     @CMD_SHOW_NONE@)
 
 #else if str($method.method) == 'pl.violin':
+    #if $method.interactive_plot:
+vitessce_widget = sc.pl.violin(
+    #else:
 sc.pl.violin(
+    #end if
     @CMD_PARAM_PLOT_INPUTS@
     #if str($method.key_variables.type) == 'var_names':
         #set $key_list = adata.var_names
@@ -220,7 +240,11 @@
     @CMD_SHOW_NONE@)
 
 #else if str($method.method) == 'pl.pca':
+    #if $method.interactive_plot:
+vitessce_widget = sc.pl.pca(
+    #else:
 sc.pl.pca(
+    #end if
     @CMD_PARAM_PLOT_INPUTS@
     @CMD_PARAM_COLOR@
     @CMD_PARAM_GENE_SYMBOLS@
@@ -264,7 +288,11 @@
     @CMD_SHOW_NONE@)
 
 #else if str($method.method) == 'pl.tsne':
+    #if $method.interactive_plot:
+vitessce_widget = sc.pl.tsne(
+    #else:
 sc.pl.tsne(
+    #end if
     @CMD_PARAM_PLOT_INPUTS@
     @CMD_PARAM_COLOR@
     @CMD_PARAM_GENE_SYMBOLS@
@@ -278,9 +306,12 @@
     @CMD_SECTION_MATPLOTLIB_PYPLOT_SCATTER@
     @CMD_PARAM_LAYER@
     @CMD_SHOW_NONE@)
-
 #else if str($method.method) == 'pl.umap':
+    #if $method.interactive_plot:
+vitessce_widget = sc.pl.umap(
+    #else:
 sc.pl.umap(
+    #end if
     @CMD_PARAM_PLOT_INPUTS@
     @CMD_PARAM_COLOR@
     @CMD_PARAM_GENE_SYMBOLS@
@@ -296,7 +327,11 @@
     @CMD_SHOW_NONE@)
 
 #else if str($method.method) == 'pl.diffmap':
+    #if $method.interactive_plot:
+vitessce_widget = sc.pl.diffmap(
+    #else:
 sc.pl.diffmap(
+    #end if
     @CMD_PARAM_PLOT_INPUTS@
     @CMD_PARAM_COLOR@
     @CMD_PARAM_GENE_SYMBOLS@
@@ -350,8 +385,6 @@
     hspace=$method.hspace,
     @CMD_SHOW_NONE@)
 
-
-
 #else if str($method.method) == 'pl.dpt_timeseries':
 sc.pl.dpt_timeseries(
     @CMD_PARAM_PLOT_INPUTS@
@@ -504,10 +537,14 @@
 
 #end if
 
-#if $advanced_common.output_anndata:
+#if $advanced_common.output_anndata or (str($method.method) in ['pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and $method.interactive_plot):
 @CMD_ANNDATA_WRITE_OUTPUTS@
 #end if
 
+#if str($method.method) in ['pl.pca', 'pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and $method.interactive_plot:
+@VITESSCE_CONFIG@
+#end if
+
 ]]></configfile>
     </configfiles>
     <inputs>
@@ -535,8 +572,6 @@
                 <option value="pl.diffmap">Embeddings: Scatter plot in Diffusion Map basis, using 'pl.diffmap'</option>
                 <option value="pl.draw_graph">Embeddings: Scatter plot in graph-drawing basis, using 'pl.draw_graph'</option>
                 <option value="pl.embedding_density">Embeddings: Plot the density of cells in an embedding (per condition), using 'pl.embedding_density'</option>
-                <!-- This function is commented out because it is not compatible with pandas version. If the issue is not resolved in the next update, this should be removed. -->
-                <!-- <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: Scatter and PAGA graph side-by-side, using 'pl.paga_compare'</option>
@@ -614,12 +649,14 @@
             </when>
             <when value="pl.heatmap">
                 <expand macro="params_inputs"/>
+                <expand macro="param_interactive_plot"/>
                 <expand macro="param_gene_symbols"/>
                 <expand macro="params_plots"/>
                 <expand macro="params_pl_heatmap"/>
             </when>
             <when value="pl.dotplot">
                 <expand macro="params_inputs"/>
+                <expand macro="param_interactive_plot"/>
                 <expand macro="param_gene_symbols"/>
                 <expand macro="params_plots"/>
                 <expand macro="params_pl_dotplot"/>
@@ -630,6 +667,7 @@
                 <expand macro="params_plots"/>
             </when>
             <when value="pl.violin">
+                <expand macro="param_interactive_plot"/>
                 <conditional name="key_variables">
                     <param name="type" type="select" label="Keys for accessing variables">
                         <option value="var_names" selected="true">All variables in '.var_names'</option>
@@ -746,6 +784,7 @@
                 <expand macro="pl_figsize"/>
             </when>
             <when value="pl.pca">
+                <expand macro="param_interactive_plot"/>
                 <expand macro="param_color"/>
                 <expand macro="param_gene_symbols"/>
                 <expand macro="param_use_raw"/>
@@ -777,6 +816,7 @@
                 <expand macro="section_matplotlib_pyplot_scatter"/>
             </when>
             <when value="pl.tsne">
+                <expand macro="param_interactive_plot"/>
                 <expand macro="param_color"/>
                 <expand macro="param_gene_symbols"/>
                 <expand macro="param_use_raw"/>
@@ -790,6 +830,7 @@
                 <expand macro="param_layer"/>
             </when>
             <when value="pl.umap">
+                <expand macro="param_interactive_plot"/>
                 <expand macro="param_color"/>
                 <expand macro="param_gene_symbols"/>
                 <expand macro="param_use_raw"/>
@@ -803,6 +844,7 @@
                 <expand macro="param_layer"/>
             </when>
             <when value="pl.diffmap">
+                <expand macro="param_interactive_plot"/>
                 <expand macro="param_color"/>
                 <expand macro="param_gene_symbols"/>
                 <expand macro="param_use_raw"/>
@@ -850,10 +892,6 @@
                 <expand macro="param_wspace"/>
                 <expand macro="param_hspace"/>
             </when>
-            <!-- This function is commented out because it is not compatible with pandas version. If the issue is not resolved in the next update, this should be removed. -->
-            <!-- <when value="pl.dpt_groups_pseudotime">
-                <expand macro="param_color_map"/>
-            </when> -->
             <when value="pl.dpt_timeseries">
                 <conditional name="heatmap">
                     <param argument="as_heatmap" type="select" label="Plot the timeseries as heatmap?">
@@ -984,21 +1022,21 @@
     </inputs>
     <outputs>
         <data name="out_png" format="png" from_work_dir="*.png" label="PNG plot from ${tool.name} (${method.method}) on ${on_string}">
-            <filter>format == 'png' and method['method'] != 'pl.rank_genes_groups_violin'</filter>
+            <filter>format == 'png' and method['method'] != 'pl.rank_genes_groups_violin' and not (method['method'] in ['pl.pca', 'pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and method['interactive_plot'])</filter>
         </data>
         <collection name="collection_png" type="list" label="PNG plots from ${tool.name} (${method.method}) on ${on_string}">
             <discover_datasets pattern="rank_genes_groups_(?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="PDF plot from ${tool.name} (${method.method}) on ${on_string}">
-            <filter>format == 'pdf' and method['method'] != 'pl.rank_genes_groups_violin'</filter>
+            <filter>format == 'pdf' and method['method'] != 'pl.rank_genes_groups_violin' and not (method['method'] in ['pl.pca', 'pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and method['interactive_plot'])</filter>
         </data>
         <collection name="collection_pdf" type="list" label="PDF plots from ${tool.name} (${method.method}) on ${on_string}">
             <discover_datasets pattern="rank_genes_groups_(?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="SVG plot from ${tool.name} (${method.method}) on ${on_string}">
-            <filter>format == 'svg' and method['method'] != pl.rank_genes_groups_violin</filter>
+            <filter>format == 'svg' and method['method'] != 'pl.rank_genes_groups_violin' and not (method['method'] in ['pl.pca', 'pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and method['interactive_plot'])</filter>
         </data>
         <collection name="collection_svg" type="list" label="SVG plots from ${tool.name} (${method.method}) on ${on_string}">
             <discover_datasets pattern="rank_genes_groups_(?P&lt;designation&gt;.*).svg" format="svg"/>
@@ -1008,7 +1046,13 @@
             <filter>advanced_common['show_log']</filter>
         </data>
         <data name="anndata_out" format="h5ad" from_work_dir="anndata.h5ad" label="${tool.name} (${method.method}) on ${on_string}: Annotated data matrix">
-            <filter>advanced_common['output_anndata']</filter>
+            <filter>advanced_common['output_anndata'] or (method['method'] in ['pl.pca', 'pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and method['interactive_plot'])</filter>
+        </data>
+        <data name="vitessce_config" format="vitessce.json" from_work_dir="config.json" label="${tool.name} (${method.method}) on ${on_string}: Vitessce interactive visualization">
+            <filter>method['method'] in ['pl.pca', 'pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and method['interactive_plot']</filter>
+        </data>
+        <data name="anndata_config" format="json" from_work_dir="anndata.ref.json" label="${tool.name} (${method.method}) on ${on_string}: Anndata configuration">
+            <filter>method['method'] in ['pl.pca', 'pl.umap', 'pl.tsne', 'pl.diffmap', 'pl.violin', 'pl.dotplot', 'pl.heatmap'] and method['interactive_plot']</filter>
         </data>
     </outputs>
     <tests>
@@ -1055,14 +1099,14 @@
 
         <!-- test 2 -->
         <test expect_num_outputs="2">
-            <param name="adata" value="krumsiek11.h5ad"/>
+            <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="xy"/>
-                    <param name="x" value="EKLF"/>
-                    <param name="y" value="Cebpa"/>
+                    <param name="x" value="FCGRT"/>
+                    <param name="y" value="SAT1"/>
                 </conditional>
                 <section name="plot">
                     <param name="legend_fontsize" value="1"/>
@@ -1078,8 +1122,8 @@
             <output name="hidden_output">
                 <assert_contents>
                     <has_text_matching expression="sc.pl.scatter"/>
-                    <has_text_matching expression="x_field='EKLF'"/>
-                    <has_text_matching expression="y_field='Cebpa'"/>
+                    <has_text_matching expression="x_field='FCGRT'"/>
+                    <has_text_matching expression="y_field='SAT1'"/>
                     <has_text_matching expression="use_raw=None"/>
                     <has_text_matching expression="sort_order=True"/>
                     <has_text_matching expression="projection='2d'"/>
@@ -1090,7 +1134,7 @@
                     <has_text_matching expression="title='A title'"/>
                 </assert_contents>
             </output>
-            <output name="out_png" file="pl.scatter.krumsiek11.png" ftype="png" compare="image_diff"/>
+            <output name="out_png" file="pl.scatter.pbmc68k_reduced.png" ftype="png" compare="image_diff"/>
         </test>
 
         <!-- test 3 -->
@@ -1128,7 +1172,7 @@
                     <has_text_matching expression="title='A title'"/>
                 </assert_contents>
             </output>
-            <output name="out_png" file="pl.scatter.pbmc68k_reduced.png" ftype="png" compare="image_diff"/>
+            <output name="out_png" file="pl.scatter.pbmc68k_reduced_n_genes_n_counts.png" ftype="png" compare="image_diff"/>
         </test>
 
         <!-- test 4 -->
@@ -1908,28 +1952,7 @@
             <output name="out_png" file="pl.embedding_density.pbmc68k_reduced.png" ftype="png" compare="image_diff"/>
         </test>
 
-        <!-- This function is commented out because it is not compatible with pandas version. If the issue is not resolved in the next update, this should be removed. -->
         <!-- test 27 -->
-        <!-- <test expect_num_outputs="2">
-            <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"/>
-
-            </conditional>
-            <section name="advanced_common">
-                <param name="show_log" value="true"/>
-            </section>
-            <output name="hidden_output">
-                <assert_contents>
-                    <has_text_matching expression="sc.pl.dpt_groups_pseudotime"/>
-                    <has_text_matching expression="color_map='viridis'"/>
-                </assert_contents>
-            </output>
-            <output name="out_png" file="pl.dpt_groups_pseudotime.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.png" ftype="png" compare="image_diff"/>
-        </test> -->
-
-        <!-- test 28 -->
         <test expect_num_outputs="2">
             <param name="adata" value="tl.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.h5ad"/>
             <param name="format" value="png"/>
@@ -1948,7 +1971,7 @@
             <output name="out_png" file="pl.dpt_timeseries.dpt.diffmap.neighbors_gauss_braycurtis.recipe_weinreb17.paul15_subsample.png" ftype="png" compare="image_diff"/>
         </test>
 
-        <!-- test 29 -->
+        <!-- test 28 -->
         <test expect_num_outputs="2">
             <param name="adata" value="tl.paga.neighbors.paul15_gauss_braycurtis.h5ad"/>
             <param name="format" value="png"/>
@@ -1971,7 +1994,7 @@
             </output>
         </test>
 
-        <!-- test 30 -->
+        <!-- test 29 -->
         <test expect_num_outputs="1">
             <param name="adata" value="tl.paga.neighbors.paul15_gauss_braycurtis.h5ad"/>
             <param name="format" value="png"/>
@@ -1986,12 +2009,12 @@
             <output name="out_png" file="pl.paga_compare.paul15_gauss_braycurtis.png" ftype="png" compare="image_diff"/>
         </test>
 
-        <!-- test 31 -->
+        <!-- test 30 -->
         <!-- <test expect_num_outputs="2">
              test pl.paga_path
         </test> -->
 
-        <!-- test 32 -->
+        <!-- test 30 -->
         <test expect_num_outputs="2">
             <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad"/>
             <param name="format" value="png"/>
@@ -2013,7 +2036,7 @@
             <output name="out_png" file="pl.rank_genes_groups.rank_genes_groups.krumsiek11.png" ftype="png" compare="image_diff"/>
         </test>
 
-        <!-- test 33 -->
+        <!-- test 31 -->
         <test expect_num_outputs="2">
             <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad"/>
             <param name="format" value="png"/>
@@ -2048,7 +2071,7 @@
             </output_collection>
         </test>
 
-        <!-- test 34 -->
+        <!-- test 32 -->
         <test expect_num_outputs="2">
             <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad"/>
             <param name="format" value="png"/>
@@ -2090,7 +2113,7 @@
             <output name="out_png" file="pl.rank_genes_groups_stacked_violin.rank_genes_groups.krumsiek11.png" ftype="png" compare="image_diff" eps="1.5"/>
         </test>
 
-        <!-- test 35 -->
+        <!-- test 33 -->
         <test expect_num_outputs="2">
             <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad"/>
             <param name="format" value="png"/>
@@ -2116,7 +2139,7 @@
             <output name="out_png" file="pl.rank_genes_groups_heatmap.rank_genes_groups.krumsiek11.png" ftype="png" compare="image_diff"/>
         </test>
 
-        <!-- test 36 -->
+        <!-- test 34 -->
         <test expect_num_outputs="2">
             <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad"/>
             <param name="format" value="png"/>
@@ -2139,7 +2162,7 @@
             <output name="out_png" file="pl.rank_genes_groups_dotplot.rank_genes_groups.krumsiek11.png" ftype="png" compare="image_diff"/>
         </test>
 
-        <!-- test 37 -->
+        <!-- test 35 -->
         <test expect_num_outputs="2">
             <param name="adata" value="tl.rank_genes_groups.krumsiek11.h5ad"/>
             <param name="format" value="png"/>
@@ -2164,7 +2187,7 @@
             <output name="out_png" file="pl.rank_genes_groups_matrixplot.rank_genes_groups.krumsiek11.png" ftype="png" compare="image_diff"/>
         </test>
 
-        <!-- test 38 pl.rank_genes_groups_dotplot with marker list-->
+        <!-- test 36 pl.rank_genes_groups_dotplot with marker list-->
         <test expect_num_outputs="2">
             <param name="adata" value="cosg.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_1.h5ad" />
             <param name="format" value="png"/>
@@ -2189,7 +2212,7 @@
             <output name="out_png" file="pl.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_marker_1.png" ftype="png" compare="image_diff"/>
         </test>
 
-        <!-- test 39: pl.rank_genes_groups_dotplot with marker list -->
+        <!-- test 37: pl.rank_genes_groups_dotplot with marker list -->
         <test expect_num_outputs="2">
             <param name="adata" value="cosg.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_1.h5ad" />
             <param name="format" value="png"/>
@@ -2214,7 +2237,7 @@
             <output name="out_png" file="pl.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_marker_filtered_1.png" ftype="png" compare="image_diff"/>
         </test>
 
-        <!-- test 40 -->
+        <!-- test 38 -->
         <test expect_num_outputs="2">
             <param name="adata" value="cosg.rank_genes_groups.newton-cg.pbmc68k_highly_reduced_1.h5ad" />
             <param name="format" value="png"/>
@@ -2231,6 +2254,112 @@
             </output>
             <output name="out_png" file="pl.rank_genes_groups_tracksplot.newton-cg.pbmc68k_highly_reduced_marker_filtered_1.png" ftype="png" compare="image_diff"/>
         </test>
+
+        <!-- test 39 -->
+        <test expect_num_outputs="4">
+            <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"/>
+                <param name="interactive_plot" value="true"/>
+                <param name="color" value="paul15_clusters"/>
+                <param name="gene_symbols" value="symbol"/>
+                <conditional name="edges">
+                    <param name="edges" value="True"/>
+                </conditional>
+                <section name="plot">
+                    <param name="legend_fontsize" value="1"/>
+                    <param name="legend_fontweight" value="normal"/>
+                    <param name="size" value="1"/>
+                </section>
+            </conditional>
+            <section name="advanced_common">
+                <param name="show_log" value="true"/>
+            </section>
+            <output name="hidden_output">
+                <assert_contents>
+                    <has_text_matching expression="sc.pl.umap"/>
+                    <has_text_matching expression="color=\['paul15_clusters'\]"/>
+                    <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="arrows=False"/>
+                    <has_text_matching expression="sort_order=True"/>
+                    <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'"/>
+                    <has_text_matching expression="size=1.0"/>
+                    <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="gene_symbols='symbol'"/>
+                </assert_contents>
+            </output>
+            <output name="vitessce_config">
+                <assert_contents>
+                    <has_n_lines n="93" />
+                    <has_text_matching expression="sc.pl.embedding for UMAP"/>
+                    <has_text_matching expression="anndata.h5ad"/>
+                    <has_text_matching expression="scatterplot"/>
+                </assert_contents>
+            </output>
+            <output name="anndata_config">
+                <assert_contents>
+                    <has_n_lines n="1" />
+                     <has_size value="29779" delta="100" />
+                    <has_text_matching expression="\\&quot;zarr_format\\&quot;:2"/>
+                </assert_contents>
+            </output>
+        </test>
+
+        <!-- test 40 -->
+        <test expect_num_outputs="4">
+            <param name="adata" value="pp.filter_genes_dispersion.krumsiek11-seurat.h5ad"/>
+            <param name="format" value="png"/>
+            <conditional name="method">
+                <param name="method" value="pl.dotplot"/>
+                <param name="interactive_plot" value="true"/>
+                <conditional name="var_names">
+                    <param name="type" value="custom"/>
+                    <param name="var_names" value="Fog1,EKLF,SCL"/>
+                </conditional>
+                <param name="gene_symbols" value="symbol"/>
+                <param name="groupby" value="cell_type"/>
+                <param name="dendrogram" value="True"/>
+                <param name="color_map" value="YlGnBu"/>
+            </conditional>
+            <section name="advanced_common">
+                <param name="show_log" value="true"/>
+            </section>
+            <output name="hidden_output">
+                <assert_contents>
+                    <has_text_matching expression="sc.pl.dotplot"/>
+                    <has_text_matching expression="gene_symbols='symbol'"/>
+                    <has_text_matching expression="var_names=\['Fog1', 'EKLF', 'SCL'\]"/>
+                    <has_text_matching expression="groupby='cell_type'"/>
+                    <has_text_matching expression="log=False"/>
+                    <has_text_matching expression="use_raw=None"/>
+                    <has_text_matching expression="num_categories=7"/>
+                    <has_text_matching expression="dendrogram=True"/>
+                </assert_contents>
+            </output>
+            <output name="vitessce_config">
+                <assert_contents>
+                    <has_n_lines n="98" />
+                    <has_text_matching expression="sc.pl.dotplot"/>
+                    <has_text_matching expression="anndata.h5ad"/>
+                </assert_contents>
+            </output>
+            <output name="anndata_config">
+                <assert_contents>
+                    <has_n_lines n="1" />
+                     <has_size value="12217" delta="100" />
+                    <has_text_matching expression="\\&quot;zarr_format\\&quot;:2"/>
+                </assert_contents>
+            </output>
+        </test>
     </tests>
     <help><![CDATA[
 Generic: Scatter plot along observations or variables axes (`pl.scatter`)
@@ -2412,13 +2541,6 @@
 More details on the `scanpy documentation
 <https://scanpy.readthedocs.io/en/stable/api/generated/scanpy.pl.embedding_density.html>`__
 
-.. This function is commented out because it is not compatible with pandas version. If the issue is not resolved in the next update, this should be removed.
-.. Branching trajectories and pseudotime, clustering: Plot groups and pseudotime (`pl.dpt_groups_pseudotime`)
-.. ===========================================================================================================
-
-.. More details on the `scanpy documentation
-.. <https://scanpy.readthedocs.io/en/stable/api/generated/scanpy.pl.dpt_groups_pseudotime.html>`__
-
 Branching trajectories and pseudotime, clustering: Heatmap of pseudotime series (`pl.dpt_timeseries`)
 =====================================================================================================
 
Binary file test-data/pl.heatmap.krumsiek11.png has changed
Binary file test-data/pl.rank_genes_groups_heatmap.rank_genes_groups.krumsiek11.png has changed
Binary file test-data/pl.rank_genes_groups_stacked_violin.rank_genes_groups.krumsiek11.png has changed
Binary file test-data/pl.scatter.krumsiek11.png has changed
Binary file test-data/pl.scatter.pbmc68k_reduced.png has changed
Binary file test-data/pl.scatter.pbmc68k_reduced_n_genes_n_counts.png has changed
Binary file test-data/pl.scatter.umap.pbmc68k_reduced.png has changed
Binary file test-data/pl.stacked_violin.krumsiek11.png has changed
Binary file test-data/pl.stacked_violin_pp.filter_genes_dispersion.krumsiek11-seurat.png has changed