1. 空间转录组学简介与Scanpy概述
空间转录组学,说白了就是给基因表达加上坐标。你想想看,传统的单细胞测序能把细胞类型分得清清楚楚,但细胞在组织里到底在哪、跟谁挨着、周围环境什么样,这些信息全丢了。我刚开始接触这个领域时总觉得,有表达矩阵不就够了吗?后来被一个真实案例打脸了——同样一群细胞,放在肿瘤核心区和放在边缘区,功能状态完全不同。
本章我们从概念开始,理清空间转录组学解决了什么问题,主流技术有哪些差异,以及为什么我这些年一直推荐用Scanpy来做空间数据分析。内容偏“全景认知”,不涉及具体代码调参,但很重要。
1.1 从单细胞到空间维度
空间转录组学,是在组织切片原位检测基因表达,同时保留细胞的空间坐标。它回答的核心问题是:这些细胞在哪?它们和谁相互作用?
常规单细胞测序(scRNA-seq)把组织解离成单细胞悬液,测序后得到表达矩阵。但解离过程破坏了组织结构,细胞之间的位置关系、邻域组成、组织微环境信息全部丢失。空间转录组学弥补了这一环。
核心区别一句话:单细胞测序告诉你“有什么细胞”,空间转录组告诉你“细胞在哪、怎么排列、和谁在一起”。
我在项目中遇到过一位做乳腺癌研究的医生,他用scRNA-seq找到了几十个差异基因,但没法确定这些基因在组织切片上的具体表达区域。后来我们用10x Visium跑了一轮空间转录组,三天就定位到了肿瘤浸润边缘的特异性表达区。这就是空间信息的价值。
空间转录组学的技术路线大致分成两类:
- 基于测序的方法——如10x Visium、Slide-seq、HDST。通过带有空间条形码的捕获芯片,从组织切片上捕获mRNA进行测序。
- 基于成像的方法——如MERFISH、seqFISH、STARmap。通过原位杂交或原位测序直接成像,单细胞分辨率更高,但通量相对较低。
1.2 主流技术平台:各有千秋
选择哪个平台,取决于你的实验问题和预算。我用一张表把几个主流方案的差异列清楚:
| 平台 | 分辨率 | 检测基因数 | 组织适用范围 | 通量(斑点/视野) | 优势 | 局限 |
|---|---|---|---|---|---|---|
| 10x Visium | 55 μm(含1-10细胞) | ~20000 | 新鲜冷冻/FFPE | ~5000 斑点 | 操作成熟,社区资源丰富 | 非单细胞分辨率 |
| Slide-seqV2 | 10 μm | ~10000 | 新鲜冷冻 | ~50000 斑点 | 高分辨,覆盖广 | 基因检出率偏低 |
| MERFISH | 单细胞(~100 nm) | 100-10000 | 新鲜冷冻/FFPE | ~10⁵ 细胞 | 真正单细胞,高精度 | 靶向 panel,通量受限 |
| STARmap | 单细胞 | ~1000 | 新鲜冷冻 | ~20000 细胞 | 原位,高分辨率 | 基因数有限 |
我的个人经验:如果刚开始接触空间转录组,预算允许的话从10x Visium入手最稳妥。社区资源多,Scanpy有原生的sc.read_visium()接口,调试成本低。等熟悉了分析流程再尝试高分辨率平台。
1.3 空间转录组数据的核心挑战
别被漂亮的t-SNE图骗了,空间转录组数据的处理比单细胞数据更麻烦。我总结了四个主要挑战:
- 稀疏性与噪声——每个斑点的覆盖深度远低于单细胞测序,零表达比例高。尤其是低表达基因,检测波动大。
- 空间自相关——邻近斑点的表达不是独立的,存在空间依赖性。传统统计方法直接套用会低估假阳性。
- 批次效应与平台差异——不同样本、不同捕获区域之间存在技术偏差。空间数据的批次校正比单细胞更复杂,因为空间结构不能被打乱。
- 多模态整合——空间转录组经常伴随H&E染色或免疫荧光图像,如何将基因表达与组织形态学对齐,是个开放问题。
我曾经踩过的坑:在做空间数据标准化时,我直接套用了单细胞数据的SCTransform流程,结果导致空间模式被过度平滑,相邻斑点的差异几乎被抹平了。之后我改用基于空间自相关模型的标准化方法,才保住了组织区域间的对比度。
1.4 Scanpy:为什么它适合空间转录组分析
Scanpy最初是为单细胞转录组设计的,但它的核心数据结构Anndata和模块化分析流程,天然适配空间数据。我从2019年开始在项目里用Scanpy处理空间数据,这些年下来,最大的感受是三点:
- Anndata的灵活性——空间坐标、组织图像、基因表达可以共存于同一个对象中。
adata.obsm['spatial']存坐标,adata.uns['spatial']存组织图像参数,结构清晰。 - 分析流程可复用——质控、归一化、降维、聚类,这些单细胞分析步骤在空间数据上同样适用。你不需要重新学一套工具。
- 社区算法集成——Squidpy、Giotto、CellCharter等空间专用工具都构建在Scanpy/Anndata生态之上。你学会Scanpy,就等于打开了整个空间转录组分析的工具箱。
安装Scanpy很简单,我建议用conda创建独立环境:
conda create -n spatial_env python=3.10
conda activate spatial_env
conda install -c conda-forge scanpy python-igraph leidenalg
pip install squidpy
加载一个10x Visium示例数据集,看看数据长什么样:
import scanpy as sc
# 读取Visium空间数据
adata = sc.datasets.visium_sge(
sample_id="V1_Breast_Cancer_Block_A"
)
print(adata)
# AnnData object with n_obs × n_vars = 3798 × 36601
# obs: 'array_row', 'array_col', 'in_tissue'
# var: 'gene_ids', 'feature_types', 'genome'
# obsm: 'spatial'
# uns: 'spatial', 'hires', 'lowres'
看到obsm['spatial']了吗?那就是每一个斑点的x, y坐标。有了这个,你就能在组织切片上画基因表达图谱了。
我个人习惯:拿到新数据集后,第一件事不是跑聚类,而是用sc.pl.spatial(adata, color='total_counts')看一眼表达量在组织上的分布。这一步能快速发现组织切片上的破损区域或捕获气泡,比任何QC指标都直观。
1.5 分析流程全景
下面的SVG图概括了从组织样本到生物学发现的全流程。我把它分成五个阶段,每个阶段都对应Scanpy生态中的关键步骤:
整个流程可以拆解为以下步骤:
- 样本制备与技术选择——根据组织类型和分辨率需求选择平台,新鲜冷冻组织适合多数方案,FFPE样本目前只有10x Visium和MERFISH支持较好。
- 数据获取与预处理——测序数据经过比对、计数生成基因-斑点表达矩阵。成像数据则需要经过图像分割、斑点识别等步骤。
- Scanpy标准分析——质控过滤(去除空斑点、低质量斑点)、归一化(scran或SCTransform风格的size-factor归一化)、HVG选择、PCA降维、聚类(Leiden算法)。这些都是单细胞分析的标准操作,直接复用即可。
- 空间特异性分析——这一步是空间转录组的核心。包括:空间可变基因检测(HVG在空间上的分布模式)、邻域组成分析、空间区域识别(通过空间约束聚类或图像分割)、配体-受体相互作用分析。
- 生物学解读——将聚类结果映射到组织切片上,识别不同组织结构(肿瘤区域、免疫浸润区、正常组织等),结合临床信息挖掘生物标志物。
1.6 本章小结
空间转录组学不是单细胞测序的替代品,而是它的互补维度。一个告诉你细胞身份的“清单”,一个告诉你组织结构的“地图”。两者结合,才是完整的生物学故事。
在这一章里,我们聊了:
- 空间转录组学解决了什么问题——给基因表达加上空间坐标
- 主流技术平台的差异——从10x Visium到MERFISH,各有适用的场景
- 数据处理的四大挑战——稀疏性、空间自相关、批次效应、多模态整合
- Scanpy为什么适合空间分析——Anndata的灵活性、流程可复用、生态丰富
- 全流程框架——从样本到生物学发现的五个阶段
给初学者的建议:先用手边的一个10x Visium公开数据集跑一遍标准流程,别追求高分辨率平台。把Scanpy的基础API用熟,把Anndata的结构摸透,再去看Squidpy、CellCharter这些空间专用工具,会事半功倍。