You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Seurat可视化成纤维细胞中单基因空间表达的问题

问题描述

我想要仅在成纤维细胞中绘制目标基因ABL1的表达,但使用ImageDimPlot时,即便已将数据子集化为仅包含成纤维细胞,仍会显示该基因在所有组织中的表达信号。已知每个细胞内基因的x、y坐标与细胞自身的x、y坐标不相同,尝试过通过设定坐标阈值筛选,但视觉精度达不到要求。

尝试过的代码

# 基于"subset"元数据设置细胞身份
Idents(nano.obj_all) <- nano.obj_all$subset

# 创建新元数据列'plot_group',分为两个层级:
# subset为"epi"的细胞标记为"Epithelial",其余标记为"Other"
nano.obj_all$plot_group <- ifelse(nano.obj_all$subset == "epi", "Epithelial", "Other")

# 根据指定身份定义要绘制的细胞
cells_to_plot <- WhichCells(nano.obj_all, idents = c("epi", "stroma", "myeloids", "tcells", "plasmas"))

# 重复设置细胞身份(冗余代码)
Idents(nano.obj_all) <- nano.obj_all$subset

# 重复创建plot_group列(冗余代码)
nano.obj_all$plot_group <- ifelse(nano.obj_all$subset == "epi", "Epithelial", "Other")

# 强制因子层级匹配
nano.obj_all$plot_group <- factor(nano.obj_all$plot_group, levels = c("Epithelial", "Other"))

# 重复定义要绘制的细胞(冗余代码)
cells_to_plot <- WhichCells(nano.obj_all, idents = c("epi", "stroma", "myeloids", "tcells", "plasmas"))

# 定义视野列表
fovs <- c("Hia", "Hib", "Hic", "Cia", "Cib", "Cic", "Uia", "Uib", "Uic")

# 循环每个视野,创建ImageDimPlot并保存为PNG
for (f in fovs) {
  p <- ImageDimPlot(nano.obj_all, 
                    fov = f,
                    cells = cells_to_plot,
                    molecules = "ABL1",
                    group.by = "plot_group",  # 使用自定义分组列着色
                    size = 0.6,
                    cols = c("Epithelial" = "#4A82F7", "Other" = "#F0B041"),  # 手动指定颜色
  ) + labs(title = f)
    ggsave(filename = paste0("ImageDimPlot_CellType_", f, ".png"),
         plot = p,
         width = 12,
         height = 12,
         dpi = 350)
  
  cat("Saved plot for fov:", f, "\n")
}
解决方案

核心问题是:ImageDimPlot的molecules = "ABL1"参数会默认加载所有视野下所有细胞的ABL1分子信号,即便你用cells参数指定只显示成纤维细胞,分子层面并未被过滤。要实现仅显示成纤维细胞内的目标基因,需先从Seurat对象中提取成纤维细胞对应的分子数据,再传递给绘图函数。

修改后的代码

假设你的成纤维细胞对应的subset标识是stroma,请根据实际情况调整:

library(Seurat)

# 1. 筛选成纤维细胞的细胞ID
fibroblast_cells <- WhichCells(nano.obj_all, idents = "stroma")

# 2. 提取所有ABL1分子的坐标及所属细胞、视野信息
abl1_molecules <- GetTissueCoordinates(nano.obj_all, features = "ABL1", cols = c("x", "y", "cell", "fov"))

# 3. 过滤出仅属于成纤维细胞的ABL1分子
fibroblast_abl1 <- abl1_molecules[abl1_molecules$cell %in% fibroblast_cells, ]

# 定义视野列表
fovs <- c("Hia", "Hib", "Hic", "Cia", "Cib", "Cic", "Uia", "Uib", "Uic")

# 循环绘制每个视野的成纤维细胞ABL1表达
for (f in fovs) {
  # 过滤当前视野下的成纤维细胞ABL1分子
  current_fov_molecules <- fibroblast_abl1[fibroblast_abl1$fov == f, ]
  
  p <- ImageDimPlot(nano.obj_all, 
                    fov = f,
                    cells = fibroblast_cells,  # 仅绘制成纤维细胞
                    molecules = current_fov_molecules,  # 仅显示成纤维细胞内的ABL1
                    group.by = "subset",  # 按细胞类型着色
                    size = 0.6,
                    cols = c("stroma" = "#F0B041")  # 成纤维细胞的颜色
  ) + labs(title = paste0(f, " - 成纤维细胞ABL1表达"))
  
  ggsave(filename = paste0("Fibroblast_ABL1_", f, ".png"),
         plot = p,
         width = 12,
         height = 12,
         dpi = 350)
  
  cat("已保存视野", f, "的图像\n")
}

关键说明

  • 先通过GetTissueCoordinates提取目标基因的所有分子信息,再通过cell列关联到成纤维细胞ID,实现分子层面的精准过滤
  • 循环中针对每个视野单独过滤分子,避免跨视野的信号干扰
  • 移除了原代码中的冗余重复部分,简化逻辑

内容的提问来源于stack exchange,提问作者samuel arthur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 23:10:54