| name | bio-workflows-spatial-pipeline |
| description | End-to-end spatial transcriptomics workflow for Visium/Xenium data. Covers data loading, preprocessing, spatial analysis, domain detection, and visualization with Squidpy. Use when analyzing spatial transcriptomics data. |
| tool_type | python |
| primary_tool | Squidpy |
| workflow | true |
| depends_on | ["spatial-transcriptomics/spatial-data-io","spatial-transcriptomics/spatial-preprocessing","spatial-transcriptomics/spatial-neighbors","spatial-transcriptomics/spatial-statistics","spatial-transcriptomics/spatial-domains","spatial-transcriptomics/spatial-visualization"] |
| qc_checkpoints | [{"after_loading":"Spots/cells detected, image aligned"},{"after_qc":"Low-quality spots filtered, genes detected"},{"after_clustering":"Spatial domains correspond to tissue regions"}] |
Spatial Transcriptomics Pipeline
Complete workflow for analyzing Visium, Xenium, or other spatial transcriptomics data.
Workflow Overview
Spatial data (Space Ranger output)
|
v
[1. Load Data] ---------> Read Visium/Xenium
|
v
[2. QC & Preprocessing] -> Filter, normalize
|
v
[3. Clustering] --------> Standard scRNA-seq clustering
|
v
[4. Spatial Analysis] --> Neighbors, statistics
|
v
[5. Domain Detection] --> Spatial domains
|
v
[6. Visualization] -----> Spatial plots
|
v
Annotated spatial data
Primary Path: Squidpy + Scanpy
Step 1: Load Data
import scanpy as sc
import squidpy as sq
import numpy as np
import matplotlib.pyplot as plt
adata = sq.read.visium('spaceranger_output/')
adata = sc.read_10x_h5('filtered_feature_bc_matrix.h5')
adata.uns['spatial'] = ...
adata = sq.read.xenium('xenium_output/')
print(f'Loaded: {adata.n_obs} spots/cells, {adata.n_vars} genes')
Step 2: Quality Control
adata.var['mt'] = adata.var_names.str.startswith('MT-')
sc.pp.calculate_qc_metrics(adata, qc_vars=['mt'], inplace=True)
fig, axes = plt.subplots(1, 3, figsize=(15, 4))
sc.pl.spatial(adata, color='total_counts', ax=axes[0], show=False)
sc.pl.spatial(adata, color=, ax=axes[], show=)
sc.pl.spatial(adata, color=, ax=axes[], show=)
plt.savefig()
sc.pp.filter_cells(adata, min_counts=)
sc.pp.filter_cells(adata, min_genes=)
sc.pp.filter_genes(adata, min_cells=)
adata = adata[adata.obs.pct_counts_mt < , :]
()