MERFISH: whole-embryo spatial transcriptomics
Training materials for the 2026 V4SDB Student Summer School on Spatial Transcriptomics
Instructors:
Dorottya Ralbovszki (BRIC University of Copenhagen)
dorottya.ralbovszki@bric.ku.dk
Virág Tarcsa (ELTE)
tarcsa.virg@gmail.com
Workshop Overview
Most spatial transcriptomics methods require thin sections. MERFISH, applied to whole mounts, does not: it resolves individual mRNA molecules in three dimensions inside an intact embryo. In this session we work with weMERFISH data — 495 genes imaged at subcellular resolution in whole zebrafish embryos across gastrulation and early organogenesis — and ask what becomes possible once every cell keeps its address.
The session is built around a single notebook, run on the local HIVE server (installed by Bruker for the Summer School). No personal laptop setup and no prior Python is assumed, though you will get more out of it if you have seen scanpy before.
- In
D:\Students, create a folder with your name or nickname. - Copy the file
2026V4SDBSummerSchool-MERFISH_Archive/01_weMERFISH_basics_YW_updated1into that folder. - Open the file.
- If VS Code opens it in Restricted Mode, click Manage → Trust the folder.
- Open the Extensions panel (left-hand sidebar) and install the Jupyter extension.
- Click Run All. When prompted to pick a kernel, choose the V4SDB Python environment.
- Enjoy the ride.
The two embryo files the notebook needs are already provided on the HIVE server — nothing to download from Dryad, and no internet connection is required during the session.
Software
We use the standard scverse Python stack: scanpy, leidenalg, igraph, requests, plotly, nbformat. On the HIVE server these are already installed in the V4SDB Python environment you select when you run the notebook, so the notebook’s own pip install cell should not need to do any real work — it is there mainly for anyone later running the notebook outside the HIVE server.
- The general-purpose single-cell analysis toolkit. The same library you will have used for 10x data — which is exactly the point. Its native
sc.pl.spatial()function does most of the plotting here.
- The container format. Cells × genes, plus annotations on both axes and arbitrary matrices attached to each.
- Spatial extensions to scanpy: neighbourhood enrichment, spatial statistics, image handling. Not required for this session but the natural next step.
- Used for the interactive 3D embryo view.
Data
Wan Y, El Kholtei J, Jenie I, et al. (2026) Whole-embryo spatial transcriptomics at subcellular resolution from gastrulation to organogenesis. Science. https://doi.org/10.1126/science.adt3439
The full dataset is deposited at Dryad under doi:10.5061/dryad.j0zpc86v9 (129 GB, CC0). We only ever need two files from it — the 50% and 75% epiboly embryos — which are provided directly on the HIVE server rather than fetched live from Dryad during the session.
The atlas can also be browsed interactively at MERFISHEYES, and the analysis code from the paper is at github.com/yinan-wan0/weMERFISH.
Workshop step by step
0. Setup
Confirm the packages are available (already true in the V4SDB environment on the HIVE server), then point the notebook at the two embryo .h5ad files.
1. A quick tour of the weMERFISH AnnData object
Reading .h5ad into AnnData and finding your way around it: cell metadata, the gene panel, and — the field that matters most for a whole-mount dataset — the spatial coordinates, which live in .obsm['spatial'] for every stage.
2. QC and data preparation
The distributed files have already passed the authors’ own QC and filtering, so we don’t re-run a 10x-style filtering pipeline. What we do look at: counts and detected genes per cell, and — the diagnostic unique to spatial data — whether a cluster holds together in physical space, not just in expression space.
3. Plotting the embryo in space
The native imaging-space view via sc.pl.spatial(), alongside the precomputed spherical sphere_side / sphere_top views, plus an interactive, rotatable 3D scatter of the whole embryo.
4. Gene expression in space
Mapping individual genes onto the embryo surface. Reading the BMP/Chordin dorsoventral gradient (bmp4 vs chrd) directly off the data.
5. Clustering and spatial structure
The familiar PCA–neighbours–Leiden workflow run on the full 495-gene panel. Then the question that only spatial data permits: put clusters computed without any coordinate information back onto the embryo and ask whether they correspond to real tissue domains, alongside a confusion matrix against the authors’ own annotation and a standard marker-gene analysis.
6. Comparing across stages
Loading the 75% epiboly embryo and comparing one gene — tbxta — between stages, both as spatial maps and as a quantitative profile along the animal–vegetal axis. A prompt to think about the limits of comparing snapshots rather than tracked cells.
References
weMERFISH
Wan, Y., El Kholtei, J., Jenie, I., Colomer-Rosell, M., Liu, J., Navajas Acedo, J., Du, L. Y., Codina-Tobias, M., Wang, M., Sawh, A., Lin, E., Chuang, T.-H., Mango, S. E., Yu, G., Bintu, B., & Schier, A. F. (2026). Whole-embryo spatial transcriptomics at subcellular resolution from gastrulation to organogenesis. Science. https://doi.org/10.1126/science.adt3439
MERFISH
Chen, K. H., Boettiger, A. N., Moffitt, J. R., Wang, S., & Zhuang, X. (2015). Spatially resolved, highly multiplexed RNA profiling in single cells. Science, 348(6233), aaa6090. https://doi.org/10.1126/science.aaa6090
scanpy
Wolf, F. A., Angerer, P., & Theis, F. J. (2018). SCANPY: large-scale single-cell gene expression data analysis. Genome Biology, 19, 15. https://doi.org/10.1186/s13059-017-1382-1
squidpy
Palla, G., Spitzer, H., Klein, M., Fischer, D., Schaar, A. C., Kuemmerle, L. B., Rybakov, S., Ibarra, I. L., Holmberg, O., Virshup, I., Lotfollahi, M., Richter, S., & Theis, F. J. (2022). Squidpy: a scalable framework for spatial omics analysis. Nature Methods, 19, 171–178. https://doi.org/10.1038/s41592-021-01358-2