空间转录组学是近年来最火的技术之一,Nature Methods年度技术, 能够在保留空间位置信息的同时进行转录组分析。 本教程详解空间转录组的完整分析流程,从数据格式到高级可视化, 让你也能发表CNS级别的空间转录组文章!
1. 空间转录组技术概述
Visium (10x Genomics)
55μm直径spot,每个spot包含1-10个细胞,目前应用最广泛
Slide-seq
10μm分辨率,接近单细胞水平,技术难度较高
Stereo-seq
华大技术,500nm分辨率,真正的亚细胞级空间组学
⚠️ 关键区别:传统单细胞测序丢失了空间位置信息, 而空间转录组能够在组织切片上同时获得基因表达和空间坐标,是连接组织学和基因组学的桥梁。
2. 安装与数据加载
# 安装Seurat和空间分析包 install.packages("Seurat") if (requireNamespace("BiocManager", quietly = TRUE)) { BiocManager::install("SeuratDisk") } # 加载必要的包 library(Seurat) library(SeuratDisk) library(ggplot2) library(patchwork)
# 加载Visium示例数据 InstallData("stxBrain") # 人类脑组织数据 LoadData("stxBrain", type = "anterior1") # 或者加载自己的Visium数据 # 需要以下文件: # - spatial/tissue_positions_list.csv # - spatial/scalefactors_json.json # - spatial/tissue_lowres_image.png # - filtered_feature_bc_matrix/ (表达矩阵) brain <- Load10X_Spatial(data.dir = "path/to/visium/folder")
3. 数据预处理与质控
# 查看Seurat对象中的空间信息 brain@images # 标准Seurat预处理流程 brain <- SCTransform(brain, assay = "Spatial", verbose = FALSE) # 降维和聚类 brain <- RunPCA(brain, verbose = FALSE) brain <- FindNeighbors(brain, dims = 1:30) brain <- FindClusters(brain, resolution = 0.8) # 运行UMAP brain <- RunUMAP(brain, dims = 1:30)
💡 SCTransform vs NormalizeData: 对于空间转录组数据,推荐使用SCTransform进行标准化,因为它能够更好地处理技术噪音。
4. 空间可视化
# 基础空间可视化 - 组织切片图 SpatialDimPlot(brain, pt.size.factor = 1.5, # 点的大小 stroke = 0, # 描边宽度 alpha = 0.8 # 透明度 ) # 按聚类着色 SpatialDimPlot(brain, group.by = "seurat_clusters", pt.size.factor = 1.5, label = TRUE, # 显示聚类标签 label.size = 3 ) # 按特定基因表达着色 SpatialFeaturePlot(brain, features = c("PCNA", "CXCL12"), # 基因名 ncol = 2 )
📌 SpatialDimPlot 参数说明:
- •
pt.size.factor:控制点的显示大小 - •
stroke:点的边框宽度,0表示无边框 - •
alpha:透明度,适合密集区域 - •
crop:TRUE则只显示组织区域
5. 与单细胞数据整合分析
# 假设有一个匹配的单细胞数据集 # 可以用于细胞类型注释和整合分析 # 1. 使用单细胞作为参考进行注释 library(SingleR) # 提取空间数据表达矩阵 spatial.data <- GetAssayData(brain, slot = "data") # 使用SingleR注释 (假设有sc.ref参考集) pred.sc <- SingleR( test = spatial.data, ref = sc.ref, labels = sc.ref$cell_type ) brain$cell_type <- pred.sc$labels # 2. 空间可视化细胞类型 SpatialDimPlot(brain, group.by = "cell_type", label = TRUE)
💡 整合分析优势: 将空间转录组与单细胞数据结合,可以: (1) 精确注释每个spot的细胞类型 (2) 识别空间特异性表达的基因 (3) 发现细胞间的空间相互作用关系
6. 识别空间变量基因
# 使用SpatialDecon或SPARKX识别空间模式基因 # 这里展示Seurat内置方法 # 计算空间变异基因 brain <- FindSpatiallyVariableFeatures( brain, features = VariableFeatures(brain), selection.method = "moransi" # Moran's I统计量 ) # 查看空间变量基因 spatial_vf <- SpatiallyVariableFeatures(brain, selection.method = "moransi") head(spatial_vf) # 可视化前几个空间变量基因 SpatialFeaturePlot(brain, features = head(spatial_vf, 4), ncol = 2)
📌 Moran's I: 是衡量空间自相关的统计量,值接近+1表示基因表达呈现空间聚集模式, 值接近0表示随机分布,负值表示离散分布。
7. 空间细胞通讯分析
# 使用CellChat分析空间细胞通讯 # 需要先将每个spot注释为细胞类型 library(CellChat) # 创建CellChat对象 cellchat <- createCellChat( object = brain, group.by = "cell_type" ) # 添加空间信息作为约束 cellchat <- identifyOverExpressedInteractions(cellchat) cellchat <- identifyCommunicationPatterns(cellchat) # 可视化通讯网络 netVisual_aggregate(cellchat, layout = "circle")
⚠️ 空间约束通讯: 空间转录组的优势在于可以考虑物理距离约束通讯, 只有相邻的细胞/spot之间才可能发生直接的配体-受体相互作用。
8. 三维空间重建
# 如果有连续切片数据,可以进行3D重建 # 1. 对齐切片 # 2. 合并Seurat对象 # 示例:合并两个相邻切片 brain.list <- list(slice1, slice2) brain.combined <- merge( x = brain.list[[1]], y = brain.list[[2]], add.cell.ids = c("slice1_", "slice2_"), project = "brain_3d" ) # 3D可视化 (使用rgl包) library(rgl) plot3d( x = brain.combined$spatial.row, y = brain.combined$spatial.col, z = brain.combined$slice, col = rainbow(10)[brain.combined$seurat_clusters] )
📝 空间转录组分析流程总结
Load10X_Spatial 加载Visium数据
SCTransform → PCA → 聚类
SpatialDimPlot/FeturePlot
变量基因、细胞通讯、3D重建