空间转录组Visium分析¶
一句话概述¶
10x Genomics Visium是目前最主流的空间转录组技术,通过在组织切片上捕获mRNA并保留空间位置信息,实现"基因表达地图"的绘制——白话说就是:不仅知道哪些基因在表达,还知道它们在组织的哪个位置表达。
核心知识点表格¶
| 知识点 | 说明 |
|---|---|
| Visium原理 | 组织切片放在带有条形码的载玻片上,每个spot(约55μm直径)捕获该位置的mRNA |
| spot vs 单细胞 | 每个spot包含1-10个细胞,不是真正的单细胞分辨率 |
| Space Ranger | 10x官方上游分析软件,类似Cell Ranger,输出表达矩阵+空间坐标 |
| Seurat | R语言主流分析框架,v5支持空间数据分析、WNN、RCTD反卷积 |
| SCTransform | Seurat推荐的归一化方法,同时完成归一化和校正 |
| 空间可变基因(SVG) | 在空间上表达不均匀的基因,用Moran's I或SPARK-X检测 |
| RCTD反卷积 | 估计每个spot中不同细胞类型的比例,需要单细胞参考数据 |
| CellChat | 基于空间信息进行细胞间通讯分析 |
| STUtility | 基于Seurat的R包,支持多切片对齐和3D可视化 |
| Visium HD / CytAssist | 新一代Visium产品,更高分辨率,传统Visium将于2026年3月停产 |
各步骤详解¶
第一步:上游处理(Space Ranger)¶
白话解释: Space Ranger就像Cell Ranger的"空间版",它把测序下机的数据和组织图像对应起来,告诉你每个spot捕获了多少哪些基因的mRNA。
技术细节: Space Ranger对FASTQ文件进行比对、去重、UMI计数,同时利用组织H&E染色图像进行配准。
# 安装Space Ranger(需要从10x Genomics官网下载)
# 下载地址:https://www.10xgenomics.com/support/software/space-ranger
# 运行spaceranger count(核心命令)
spaceranger count \ # 主命令:计数分析
--id=sample_01 \ # 样本ID,自己命名
--transcriptome=/ref/refdata-gex-GRCh38 \ # 参考基因组路径
--fastqs=/data/fastqs/ \ # 测序FASTQ文件目录
--sample=Sample1 \ # FASTQ文件中的样本名
--image=/data/tissue_image.tif \ # 组织H&E染色图像
--slide=V19L01-041 \ # 载玻片序列号
--area=A1 \ # 捕获区域编号
--localcores=16 \ # 使用CPU核心数
--localmem=64 # 最大内存(GB)
第二步:数据加载与质控(R/Seurat)¶
白话解释: 把Space Ranger的结果读入R,看看数据质量怎么样——比如每个spot检测到多少基因、有没有异常的spot。
# 安装必要的R包
# install.packages("Seurat") # 安装Seurat(如果没有)
library(Seurat) # 加载Seurat包
# 加载Visium数据
# Load10X_Spatial()读取spaceranger输出,自动关联图像
spatial_data <- Load10X_Spatial(
data.dir = "spaceranger_output/outs/", # Space Ranger输出目录
filename = "filtered_feature_bc_matrix.h5", # 表达矩阵文件
assay = "Spatial", # 检测类型命名为Spatial
slice = "tissue_slice" # 切片名称
)
# 查看数据基本信息
spatial_data # 显示基因数、spot数等信息
# 质控:计算线粒体基因比例(高比例说明细胞可能受损)
spatial_data[["percent.mt"]] <- PercentageFeatureSet(
spatial_data, # 输入Seurat对象
pattern = "^MT-" # 线粒体基因以MT-开头
)
# 空间可视化质控指标
SpatialFeaturePlot(
spatial_data, # Seurat对象
features = "nCount_Spatial" # 可视化每个spot的UMI总数
)
# 过滤低质量spot
spatial_data <- subset(
spatial_data, # 原始数据
subset = nFeature_Spatial > 200 & # 至少检测到200个基因
nFeature_Spatial < 6000 & # 最多6000个基因(去除doublet)
percent.mt < 20 # 线粒体基因比例不超过20%
)
第三步:归一化与降维聚类¶
白话解释: 对数据做标准化处理(让不同spot之间可以比较),然后找出哪些spot的表达模式相似,把它们归为一类。
# SCTransform归一化(Seurat推荐方法)
# 白话:校正技术噪音,让生物学差异凸显出来
spatial_data <- SCTransform(
spatial_data, # 输入Seurat对象
assay = "Spatial", # 指定Spatial assay
verbose = FALSE # 不显示冗余信息
)
# PCA降维(把高维数据压缩到少数几个主成分)
spatial_data <- RunPCA(
spatial_data, # 输入数据
assay = "SCT", # 使用SCTransform后的数据
verbose = FALSE # 静默模式
)
# 构建近邻图 + 聚类
spatial_data <- FindNeighbors(
spatial_data, # 输入数据
reduction = "pca", # 基于PCA结果
dims = 1:30 # 使用前30个主成分
)
spatial_data <- FindClusters(
spatial_data, # 输入数据
verbose = FALSE, # 静默模式
resolution = 0.8 # 分辨率,越大cluster越多
)
# UMAP降维(用于可视化)
spatial_data <- RunUMAP(
spatial_data, # 输入数据
reduction = "pca", # 基于PCA
dims = 1:30 # 使用前30个主成分
)
# 在组织切片上可视化聚类结果
SpatialDimPlot(
spatial_data, # Seurat对象
label = TRUE, # 显示cluster编号
label.size = 3 # 标签字体大小
)
第四步:空间可变基因(SVG)鉴定¶
白话解释: 找出那些"在空间上表达不均匀"的基因——比如某个基因只在肿瘤区域高表达,在正常组织区域低表达。
# 使用Moran's I检测空间可变基因
# Moran's I衡量空间自相关性:值越高说明空间分布越不随机
spatial_data <- FindSpatiallyVariableFeatures(
spatial_data, # 输入数据
assay = "SCT", # 使用SCTransform后的数据
features = VariableFeatures(spatial_data), # 候选基因列表
selection.method = "moransi" # 使用Moran's I方法
)
# 查看top空间可变基因
top_svg <- head(
SpatiallyVariableFeatures(spatial_data, selection.method = "moransi"),
n = 6 # 前6个SVG
)
print(top_svg) # 打印结果
# 可视化空间可变基因的表达分布
SpatialFeaturePlot(
spatial_data, # Seurat对象
features = top_svg[1:4], # 显示前4个SVG
ncol = 2, # 每行2个图
alpha = c(0.1, 1) # 透明度范围
)
第五步:反卷积分析(RCTD)¶
白话解释: 每个Visium spot里面有好几个细胞。反卷积就是"拆开"每个spot,推算里面各种细胞类型各占多少比例——就像知道一杯混合果汁里苹果汁、橙汁各占多少。
# 需要一个单细胞RNA-seq参考数据集
# 假设已有配套的scRNA-seq Seurat对象:sc_ref
# 1. 准备参考数据
library(spacexr) # 加载spacexr包(包含RCTD)
# 提取参考数据的计数矩阵和细胞类型信息
counts_ref <- GetAssayData(sc_ref, slot = "counts") # 参考表达矩阵
cell_types <- sc_ref$celltype # 每个细胞的类型标签
names(cell_types) <- colnames(sc_ref) # 确保有细胞barcode名字
# 创建Reference对象
reference <- Reference(
counts = counts_ref, # 参考表达矩阵
cell_types = cell_types # 细胞类型标签
)
# 2. 准备空间数据
counts_st <- GetAssayData(spatial_data, assay = "Spatial", slot = "counts")
coords <- GetTissueCoordinates(spatial_data) # 获取空间坐标
query <- SpatialRNA(
coords = coords, # 空间坐标
counts = counts_st # spot表达矩阵
)
# 3. 运行RCTD
rctd <- create.RCTD(query, reference, max_cores = 8) # 创建RCTD对象
rctd <- run.RCTD(rctd, doublet_mode = "doublet") # 运行反卷积
# 4. 将结果加入Seurat对象
spatial_data <- AddMetaData(
spatial_data, # 原始Seurat对象
metadata = rctd@results$weights # RCTD估计的细胞类型比例
)
常见报错与解决¶
| 报错 | 原因 | 解决方案 |
|---|---|---|
Error: Image not found | 图像路径不正确或格式不支持 | 检查图像路径,确保是.tif或.png格式 |
Error in Load10X_Spatial: file not found | 目录结构不对 | 确保有spatial/目录和filtered_feature_bc_matrix.h5文件 |
SCTransform error: no variable genes | 过滤太严格导致基因太少 | 放宽过滤阈值,保留更多基因 |
FindSpatiallyVariableFeatures: 0 features | 候选基因列表为空 | 先运行VariableFeatures()获取候选基因 |
spaceranger: slide ID not recognized | 载玻片序列号输错 | 检查载玻片背面的序列号,或用--unknown-slide选项 |
RCTD: reference has too few cells | 参考数据细胞数不足 | 确保每种细胞类型至少25个细胞 |
| 内存不足 (killed) | 数据量大,内存爆了 | 用subsample减少数据量,或增加服务器内存 |
速查表¶
# ========== 快速命令速查 ==========
# Space Ranger流程
spaceranger count --id=ID --transcriptome=REF --fastqs=DIR --image=IMG --slide=SN --area=A1
# R分析核心流程(6步)
data <- Load10X_Spatial("outs/") # 1. 加载
data <- SCTransform(data, assay="Spatial") # 2. 归一化
data <- RunPCA(data) # 3. PCA
data <- FindNeighbors(data, dims=1:30) # 4. 建图
data <- FindClusters(data, resolution=0.8) # 5. 聚类
SpatialDimPlot(data, label=TRUE) # 6. 可视化
# 空间可变基因
FindSpatiallyVariableFeatures(data, selection.method="moransi")
# 关键可视化函数
SpatialFeaturePlot(data, features="GENE") # 单基因空间表达图
SpatialDimPlot(data) # 聚类空间分布图
面试高频问题¶
Q1: Visium的空间分辨率是多少?和单细胞有什么区别?
Visium标准版每个spot直径55μm,间距100μm(中心到中心),一张切片约5000个spot。每个spot包含1-10个细胞,所以不是真正的单细胞分辨率。如果需要单细胞分辨率,可以用Visium HD(2μm)或10x Xenium(原位杂交技术)。
Q2: 什么是空间可变基因(SVG),怎么检测?
SVG是指在空间上表达模式不均匀的基因。比如一个基因只在肿瘤核心区域高表达,而在周围正常组织低表达。常用Moran's I(衡量空间自相关)或SPARK-X(非参数方法)来检测。Moran's I值越接近1,说明空间聚集性越强。
Q3: Visium数据的反卷积是什么?为什么需要?
因为每个spot含多个细胞,直接分析只能得到"混合信号"。反卷积就是用单细胞参考数据,推算每个spot中各细胞类型的比例。常用方法有RCTD(Seurat内置)、cell2location、SPOTlight等。需要一个高质量的配对单细胞数据集作为参考。
Q4: Seurat v5在空间分析方面有哪些新特性?
Seurat v5新增了:(1) 原生支持RCTD反卷积;(2) 支持Visium HD和Xenium等新平台;(3) Moran's I方法检测空间可变基因;(4) 多样本空间数据整合(结合Harmony进行批次校正);(5) 支持VisiumHD的几何下采样(geometric sketching)。
Q5: 空间转录组有哪些主要技术路线?各有什么优缺点?
主要分两大类:(1) 基于测序的:Visium(通量高但分辨率有限)、Slide-seq、MERFISH;(2) 基于原位杂交的:10x Xenium、Vizgen MERSCOPE(单细胞分辨率,但检测基因数有限)。选择取决于:分辨率需求、检测基因数、组织大小、成本预算。