单细胞空间转录组分析流程学习(二)

本次使用GSE217414数据,包含4个结直肠癌肝转移患者样本数据,这个数据集的数据整理的挺好的,都做了归类。

1.导入
rm(list = ls())
library(Seurat) # 4.4.0
library(SeuratData) # 5.0.2
library(tidyverse)
library(sloop)
library(ggplot2)
library(patchwork)
library(dplyr)

# 10x Visium
sce_s <- Load10X_Spatial(data.dir = "./RawData/GSE6716963/",
                           filename = "GSM6716963_19G081_filtered_feature_bc_matrix.h5")

# # 高像素
# image <- Read10X_Image(image.dir = "./RawData/GSM5494475/spatial/",
#                        image.name = "tissue_hires_image.png")
# sce_s <- Load10X_Spatial(data.dir = "./RawData/GSM5494475", image = image,
#                                  filename = "GSM5494475_HNSCC201125T04_filtered_feature_bc_matrix.h5")
2.check数据
head(sce_s[["slice1"]]@coordinates)
#                    tissue row col imagerow imagecol
# AAACAAGTATCTCCCA-1      1  50 102     1363     3426
# AAACACCAATAACTGC-1      1  59  19     4005     3980
# AAACAGAGCGACTCCT-1      1  14  94     1658     1430
# AAACATTTCCCGGATT-1      1  61  97     1510     4041
# AAACCGGGTAGGTACC-1      1  42  28     3736     3029
# AAACCGTTCGTCCAGG-1      1  52  42     3278     3576

dim(sce_s[["slice1"]]@image)
# [1] 564 600   3
# 564 和 600:表示图像的高度(564像素)和宽度(600像素)。
# 3:表示图像的颜色通道数,即RGB(红、绿、蓝)三通道。每个像素位置有三个值,分别对应于红色、绿色和蓝色的强度,用于合成彩色图像。

head(GetTissueCoordinates(sce_s))
#                    imagerow imagecol
# AAACAAGTATCTCCCA-1 148.1522 372.3913
# AAACACCAATAACTGC-1 435.3261 432.6087
# AAACAGAGCGACTCCT-1 180.2174 155.4348
# AAACATTTCCCGGATT-1 164.1304 439.2391
# AAACCGGGTAGGTACC-1 406.0869 329.2391
# AAACCGTTCGTCCAGG-1 356.3043 388.6956
head(GetTissueCoordinates(sce_s[["slice1"]]))
#                    imagerow imagecol
# AAACAAGTATCTCCCA-1 148.1522 372.3913
# AAACACCAATAACTGC-1 435.3261 432.6087
# AAACAGAGCGACTCCT-1 180.2174 155.4348
# AAACATTTCCCGGATT-1 164.1304 439.2391
# AAACCGGGTAGGTACC-1 406.0869 329.2391
# AAACCGTTCGTCCAGG-1 356.3043 388.6956

@coordinates:

这里的 @coordinates 提供的是点在 全分辨率 下(即加载的原始HE图像分辨率)的坐标。因此,这些坐标直接反映在原始高分辨率图像上的点的像素位置。

GetTissueCoordinates():

GetTissueCoordinates() 返回的坐标通常是基于 缩放后的图像,即使用了低分辨率图像进行缩放或处理后的点的坐标。Seurat 会将这些缩放后的图像应用到显示或处理操作中。

纠正上一个推文的错误,这里的数据不一致是正确的,是因为缩放的原因

3.数据预处理
plot1 <- VlnPlot(sce_s, features = "nCount_Spatial", pt.size = 0.2) + 
  NoLegend()
plot2 <- SpatialFeaturePlot(sce_s, features = "nCount_Spatial",
                            pt.size.factor = 2) + 
  theme(legend.position = "right")
wrap_plots(plot1, plot2)

# SCTransform归一化
library(glmGamPoi)
sce_s <- SCTransform(sce_s, assay = "Spatial", 
                     return.only.var.genes = FALSE, verbose = FALSE)


SpatialDimPlot(sce_s,alpha = 0)

4.基因表达可视化
SpatialFeaturePlot(sce_s, features = c("TP53", "CD3E"))
                  # pt.size.factor = 2)

library(ggplot2)
plot <- SpatialFeaturePlot(sce_s, features = c("TP53")) +
                        # alpha = c(0.1, 1)调整透明度   pt.size.factor = 5)
                        theme(legend.text = element_text(size = 0),
    legend.title = element_text(size = 20), 
    legend.key.size = unit(1, "cm"));plot
ggsave(filename = "./output/images/spatial_tp53.pdf", 
       height = 9, width = 7)

5.降维聚类可视化
sce_s <- RunPCA(sce_s, assay = "SCT", verbose = FALSE)
sce_s <- FindNeighbors(sce_s, reduction = "pca", dims = 1:30)
sce_s <- FindClusters(sce_s, verbose = FALSE)
sce_s <- RunUMAP(sce_s, reduction = "pca", dims = 1:30)

p1 <- DimPlot(sce_s, reduction = "umap", label = TRUE)
p2 <- SpatialDimPlot(sce_s, label = TRUE, label.size = 3)
                     #pt.size.factor = 2)
p1 + p2

6.提取特定clusters
SpatialDimPlot(sce_s, 
               cells.highlight = CellsByIdentities(object = sce_s,
                                                   idents = c(2,4,6)), 
               facet.highlight = TRUE, ncol = 3)

7.交互式绘图
# 设置interactive为True
SpatialDimPlot(sce_s, interactive = TRUE)
SpatialFeaturePlot(sce_s, features = "TP53", interactive = TRUE)
8.空间可变特征识别

一、根据组织内预先注释的解剖区域进行差异表达,比如上面通过FindClusters找到的不同cluster

# 指定比较clust5和6
de_markers <- FindMarkers(sce_s, ident.1 = 5, ident.2 = 6)
# 在空间位置上可视化差异表达基因
SpatialFeaturePlot(object = sce_s, 
                   features = rownames(de_markers)[1:3], 
                   alpha = c(0.1, 1), #pt.size.factor = 5,
                   ncol = 3)

二、FindSpatiallyVariables中实现的另一种方法是在没有预注释的情况下搜索表现出空间模式的特征

# 默认method = 'markvariogram', 其他有moransi等
# 差异基因从高变基因中获取
sce_s <- FindSpatiallyVariableFeatures(sce_s, 
                                       assay = "SCT", 
                                       features = VariableFeatures(sce_s)[1:1000],
                                       selection.method = "moransi")
# 提取6个差异基因看一看
top.features <- head(SpatiallyVariableFeatures(sce_s,selection.method = "moransi"),6)

# 异基因可视化/笔者这里自定义了
top.features <- c("CASQ1", "AEBP1", "MME")
SpatialFeaturePlot(sce_s, features = top.features, 
                   ncol = 3, , alpha = c(0.1, 1)) #pt.size.factor = 5

9.对解剖区域(clusters)子集化

修整图片范围

# 根据切片图像坐标(前缀需和Key保持一致),进一步去除多余的spots数据:
datSub <- subset(sce_s, idents = c(1, 2, 3))
SpatialDimPlot(datSub, crop = TRUE, label = TRUE,label.size = 3) # pt.size.factor = 5,

# 获得坐标信息
img<- GetTissueCoordinates(datSub)
head(img)
# 获得cluster的信息
ident<- Idents(datSub)
head(ident)
# 合并切片图像坐标、分群信息;
imgId<- data.frame(img,ident)
head(imgId)
# 赵小明777老师指出显微照片的像素坐标原点在左上角,而图表的原点在左下角,因此需要做垂直翻转y=540-imagerow:
library(ggplot2)
ggplot(img, aes(x=imagecol, y=540-imagerow,color = ident)) +
  geom_point(size = 1.6)+
  theme_bw()

datSub <- subset(datSub, imagecol > 200 | imagecol < 400, invert = TRUE)
p1 <- SpatialDimPlot(sce_s, crop = TRUE, label = TRUE)
p2 <- SpatialDimPlot(datSub, crop = FALSE, label = TRUE, pt.size.factor = 1, label.size = 3)
p1 + p2

这里笔者根据10X官网和其他老师的代码做了尝试,但是出现了报错,目前还没有找到解决的办法hhh

但不影响后面的分析。

10.整合单细胞+空转数据
library(dplyr)
library(qs)
reference <- qread("sc_dataset.qs") 
reference <- subset(reference,downsample = 2000)
reference <- SCTransform(reference,ncells = 3000, 
                         verbose = FALSE) %>%
    RunPCA(verbose = FALSE) %>%
    RunUMAP(dims = 1:30)

DimPlot(reference, group.by = "celltype", label = TRUE)

这次换一个新演员

整合两者的数据

anchors <- FindTransferAnchors(reference = reference, 
                               query = sce_s, 
                               normalization.method = "SCT")
predictions.assay <- TransferData(anchorset = anchors, 
                                  refdata = reference$celltype, 
                                  prediction.assay = TRUE,
                                  weight.reduction = sce_s[["pca"]], 
                                  dims = 1:30)
sce_s[["predictions"]] <- predictions.assay

整合进去了

可视化-细胞亚群映射

DefaultAssay(sce_s) <- "predictions"
SpatialFeaturePlot(sce_s, features = c("mast cells", "C3"), 
                   pt.size.factor = 1.6, ncol = 2, crop = TRUE)

根据这些预测分数,使用者可以预测位置受空间限制的细胞类型(这里就是能够观察不同细胞亚群在组织上的空间位置)。

使用基于marker point的方法来定义空间高变特征,但使用细胞类型预测分数作为“标记”而不是基因表达。

# 同样需要获取高变异特征,但映射的时候使用的是celltype的分数
sce_s <- FindSpatiallyVariableFeatures(sce_s,
                                       assay = "predictions", 
                                       selection.method = "moransi",
                                       features = rownames(sce_s),
                                       r.metric = 5, slot = "data")
# 提取4个差异clsutes看一看
top.clusters <- head(SpatiallyVariableFeatures(sce_s, selection.method = "moransi"), 4)
SpatialPlot(object = sce_s, features = top.clusters, ncol = 2)

这个不展示了,跟上面的图是差不多的。

今天暂时学习到这儿,走完这个流程就已经可以增加基因表达情况和细胞亚群在组织中分布的情况了~ 但没有解决怎么剪裁HE图片hhh

参考资料:
  1. 10XGENOMICS:https://www.10xgenomics.com/cn

  2. Seurat空转:https://satijalab.org/seurat/articles/spatial_vignette.html

  3. 生信技能树: https://mp.weixin.qq.com/s/C57QHpg_uD_YkgrmnvRMPA https://mp.weixin.qq.com/s/xVYCwfJI4MUAuka1W99efQ

  4. 生信随笔:https://mp.weixin.qq.com/s/X8eP58iDEx4j7pSyGbze9Q

:若对内容有疑惑或者有发现明确错误的朋友,请联系后台(欢迎交流)。更多内容可关注公众号:生信方舟

- END -

### 空间转录组学与单细胞测序的技术特点 #### 单细胞测序技术概述 单细胞测序是一种能够解析个体细胞之间差异的强大工具,其核心在于捕捉单个细胞内的分子特征。相比于传统的批量测序(bulk RNA-seq),它能更好地揭示细胞间的异质性[^3]。具体来说,单细胞转录组测序(scRNA-seq)通过分离并分析单一细胞的mRNA表达谱来实现这一点。 #### 空间转录组学的核心价值 空间转录组学则进一步扩展了单细胞测序的能力,不仅提供了基因表达的信息,还保留了这些表达模式在组织中的物理位置。这种能力对于理解复杂的组织结构及其功能至关重要[^4]。例如,在肿瘤微环境中,特定类型的免疫细胞可能聚集于某些区域,而空间转录组学可以精确定位这些分布特性[^1]。 --- ### 常见技术平台比较 | 技术名称 | 特点 | |------------------|------------------------------------------------------------------------------------------| | **10x Genomics** | 提供高通量解决方案,支持大规模实验设计;适用于多种样品类型 | | | - scRNA-seq:捕获大量单细胞的数据 | | | - Visium Spatial Gene Expression:专注于整个切片上的空间分辨率 | 上述两种方案均被广泛应用,并且随着硬件改进和技术优化不断进步[^5]。 --- ### 数据处理与生物信息学分析流程 针对这两种数据集的计算框架通常分为以下几个方面: 1. **质量控制 (QC)** 初步筛选去除低质量读取片段以及背景噪音干扰项。 2. **标准化 Normalization** 使用log transformation或其他统计模型调整原始计数值以便后续建模操作更加稳健可靠. 3. **降维 Dimensionality Reduction & Clustering** 应用PCA, t-SNE 或 UMAP 方法降低维度后聚类发现潜在的新颖亚型群体. 4. **标记基因鉴定 Marker Identification** 找到区分各个cluster的关键因素即所谓markers genes用于解释生物学意义. 5. **可视化 Visualization** 结果呈现形式多样包括散点图热力图等等直观展示重要趋势变化规律. 6. **高级分析 Advanced Analysis** 如轨迹推断(Trajectory Inference), 细胞通讯(Cell Communication)预测等深入挖掘隐藏机制.[^2] 以下是Python代码示例演示如何利用Scanpy库完成部分基础步骤: ```python import scanpy as sc adata = sc.read_10x_h5('filtered_gene_bc_matrices.h5') # 加载数据 sc.pp.filter_cells(adata, min_genes=200) # 过滤掉不合格单元格 sc.pp.normalize_total(adata, target_sum=1e4) # 总数归一化至每万条reads sc.pp.log1p(adata) # 取自然对数变换改善动态范围表现 sc.tl.pca(adata,n_comps=50) # PCA分解提取主要成分向量表示原矩阵近似情况 sc.pl.pca_variance_ratio(adata) # 展现各主轴贡献度比例曲线图表辅助判断最佳选取数目 ``` --- ### 实际案例分享 一篇发表的研究展示了结合多组学手段探索心脏病理过程的成功范例。其中提到运用snRNA-seq加scATAC-seq再加上Visium Space Transcriptome三重验证最终锁定了调控心肌纤维分化的重要因子RUNX1作为治疗靶点之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值