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

在Seurat中同时可视化单细胞RNA测序3个特征及二值化问题

单细胞RNA测序UMAP多特征可视化与meta.data列二值化解决方案

一、在UMAP图上同时可视化3个特征

Seurat的DimPlot(blend=TRUE)仅支持同时展示2个特征,但可以通过叠加图层、混合编码规则等方式实现3个特征的可视化,以下是几种实用方法:

方法1:Blend双特征 + 高表达细胞轮廓圈

先绘制两个特征的Blend融合图,再给第三个特征的高表达细胞添加轮廓圈标记:

# 1. 生成双特征Blend基础图
base_plot <- DimPlot(seurat_obj, features = c("FeatureA", "FeatureB"), blend = TRUE)

# 2. 定义第三个特征的高表达阈值(示例取前20%的细胞)
feature3_threshold <- quantile(seurat_obj@meta.data$FeatureC, 0.8)
high_feature3_cells <- rownames(seurat_obj@meta.data)[seurat_obj@meta.data$FeatureC > feature3_threshold]

# 3. 叠加轮廓圈到基础图
library(ggplot2)
base_plot +
  geom_point(
    data = subset(base_plot$data, rownames(base_plot$data) %in% high_feature3_cells),
    aes(x = UMAP_1, y = UMAP_2),
    shape = 21, size = 2, fill = NA, color = "black", stroke = 1.2
  )

方法2:Blend颜色 + 点形状编码第三个特征

将第三个特征二值化后,用不同的点形状区分高低表达,与Blend颜色结合:

# 1. 给第三个特征做二值化(提前添加到meta.data)
seurat_obj$FeatureC_binary <- ifelse(seurat_obj@meta.data$FeatureC > median(seurat_obj@meta.data$FeatureC), "High", "Low")

# 2. 绘制Blend图并映射形状
DimPlot(seurat_obj, features = c("FeatureA", "FeatureB"), blend = TRUE) +
  aes(shape = FeatureC_binary) +
  scale_shape_manual(values = c("High" = 17, "Low" = 16)) +
  guides(shape = guide_legend(title = "FeatureC"))

方法3:手动构建ggplot图实现多维度编码

直接提取UMAP坐标和特征值,通过颜色、大小、形状等多种维度同时编码3个特征:

# 1. 提取UMAP坐标与三个特征数据
umap_df <- as.data.frame(seurat_obj@reductions$umap@cell.embeddings) %>%
  mutate(
    FeatureA = seurat_obj@assays$RNA@data["FeatureA", ],
    FeatureB = seurat_obj@assays$RNA@data["FeatureB", ],
    FeatureC = seurat_obj@meta.data$FeatureC
  )

# 2. 计算双特征Blend颜色(RGB混合)
umap_df$blend_color <- rgb(
  umap_df$FeatureA / max(umap_df$FeatureA),
  umap_df$FeatureB / max(umap_df$FeatureB),
  0, alpha = 0.7
)

# 3. 用颜色表示双特征Blend,大小表示第三个特征
ggplot(umap_df, aes(x = UMAP_1, y = UMAP_2)) +
  geom_point(aes(color = blend_color, size = FeatureC)) +
  scale_color_identity() +
  scale_size_continuous(range = c(0.5, 2)) +
  theme_classic() +
  labs(size = "FeatureC Expression")

二、meta.data自定义列(如模块分数)的二值化

针对AddModuleScore生成的模块分数列,可通过以下方式快速二值化:

方式1:基于固定阈值二值化

# 示例:以中位数为阈值,区分高低表达
module_score_col <- "Module1"  # 替换为你的模块分数列名
threshold <- median(seurat_obj@meta.data[[module_score_col]])
seurat_obj@meta.data[[paste0(module_score_col, "_binary")]] <- ifelse(
  seurat_obj@meta.data[[module_score_col]] > threshold,
  "High", "Low"
)

方式2:基于分位数阈值二值化

适合需要取Top N%高表达细胞的场景:

# 示例:取前30%的细胞为高表达
module_score_col <- "Module1"
threshold <- quantile(seurat_obj@meta.data[[module_score_col]], 0.7)
seurat_obj@meta.data[[paste0(module_score_col, "_binary")]] <- ifelse(
  seurat_obj@meta.data[[module_score_col]] > threshold,
  "High", "Low"
)

方式3:用dplyr简化批量二值化

如果有多个模块分数列,可批量处理:

library(dplyr)
module_cols <- c("Module1", "Module2", "Module3")  # 替换为你的模块列名
seurat_obj@meta.data <- seurat_obj@meta.data %>%
  mutate(across(all_of(module_cols), ~case_when(
    . > quantile(., 0.7) ~ "High",
    TRUE ~ "Low"
  ), .names = "{.col}_binary"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:03:09