首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >单细胞分析: Scanpy 核心绘图 (2)

单细胞分析: Scanpy 核心绘图 (2)

作者头像
数据科学工厂
发布2025-07-24 10:46:46
发布2025-07-24 10:46:46
21000
代码可运行
举报
运行总次数:0
代码可运行

引言

本系列讲解 使用 Scanpy 分析单细胞(scRNA-seq)数据 教程[1],持续更新,欢迎关注,转发!

基于已知标记基因识别细胞簇

通常,细胞簇需要利用众所周知的标记基因来进行标注。使用散点图,我们可以查看某个基因的表达情况,并可能将其与某个细胞簇关联起来。在此,我们将展示其他可视化的方式,用点图、小提琴图、热图以及我们称之为 ‘tracksplot’ 的图形,将标记基因与细胞簇关联起来。所有这些可视化方法汇总了相同的信息——按细胞簇拆分的表达量——而挑选最佳结果则留给研究者自行决定。

首先,我们建立一个包含标记基因的字典,因为这将允许 scanpy 自动对这些基因组进行分组标记:

代码语言:javascript
代码运行次数:0
运行
复制
marker_genes_dict = {
    "B-cell": ["CD79A", "MS4A1"],
    "Dendritic": ["FCER1A", "CST3"],
    "Monocytes": ["FCGR3A"],
    "NK": ["GNLY", "NKG7"],
    "Other": ["IGLL1"],
    "Plasma": ["IGJ"],
    "T-cell": ["CD3D"],
}

dotplot

一种快速检查这些基因在每个细胞簇中表达情况的方法是使用 dotplot。这种图总结了两类信息:颜色表示每个类别(在此为每个细胞簇)内的平均表达量,而点的大小则指示该类别中表达该基因的细胞比例。

此外,在图中添加 dendrogram 也很有帮助,它能把相似的细胞簇聚集在一起。层级聚类是利用各细胞簇之间 PCA components 的相关性自动计算的。

代码语言:javascript
代码运行次数:0
运行
复制
sc.pl.dotplot(pbmc, marker_genes_dict, "clusters", dendrogram=True)

使用这张图,我们可以看到 cluster 4 对应于 B-cells,cluster 2 是 T-cells 等等。这些信息可以用来按如下方式手动注释细胞:

代码语言:javascript
代码运行次数:0
运行
复制
# create a dictionary to map cluster to annotation label
cluster2annotation = {
    "0": "Monocytes",
    "1": "NK",
    "2": "T-cell",
    "3": "Dendritic",
    "4": "Dendritic",
    "5": "Plasma",
    "6": "B-cell",
    "7": "Dendritic",
    "8": "Other",
}

# add a new `.obs` column called `cell type` by mapping clusters to annotation using pandas `map` function
pbmc.obs["cell type"] = pbmc.obs["clusters"].map(cluster2annotation).astype("category")

sc.pl.dotplot(pbmc, marker_genes_dict, "cell type", dendrogram=True)
代码语言:javascript
代码运行次数:0
运行
复制
sc.pl.umap(
    pbmc,
    color="cell type",
    legend_loc="on data",
    frameon=False,
    legend_fontsize=10,
    legend_fontoutline=2,
)

violin plot

另一种探索标记基因的方法是使用 violin plot。在这里,我们可以看到 CD79A 在 clusters 5 和 8 中的表达,以及 MS4A1 在 cluster 5 中的表达。与 dotplot 相比,violin plot 让我们了解基因表达值在细胞间的分布情况。

代码语言:javascript
代码运行次数:0
运行
复制
with rc_context({"figure.figsize": (4.5, 3)}):
    sc.pl.violin(pbmc, ["CD79A", "MS4A1"], groupby="clusters")

注意:Violin plots 也可用于绘制任何保存在 .obs 中的数值型数据。例如,这里用 violin plots 比较不同 clusters 之间的基因数量以及线粒体基因所占百分比。

代码语言:javascript
代码运行次数:0
运行
复制
with rc_context({"figure.figsize": (4.5, 3)}):
    sc.pl.violin(
        pbmc,
        ["n_genes", "percent_mito"],
        groupby="clusters",
        stripplot=False,  # remove the internal dots
        inner="box",  # adds a boxplot inside violins
    )

stacked-violin plot

为了同时查看所有标记基因的 violin plots,我们使用 sc.pl.stacked_violin。与前文相同,添加了一条 dendrogram 用以将相似的 clusters 归为一组。

代码语言:javascript
代码运行次数:0
运行
复制
ax = sc.pl.stacked_violin(
    pbmc, marker_genes_dict, groupby="clusters", swap_axes=False, dendrogram=True
)

matrixplot

可视化基因表达的一种简单方法是使用 matrix plot。这是一种以类别为单位,展示每个基因平均表达量的 heatmap。这种类型的图基本上与 dotplot 中的颜色所传达的信息相同。

在此,我们将基因的表达量缩放到 0 到 1 之间,其中 1 表示该基因在所有 clusters 中的最大平均表达量,0 表示最小平均表达量。

代码语言:javascript
代码运行次数:0
运行
复制
sc.pl.matrixplot(
    pbmc,
    marker_genes_dict,
    "clusters",
    dendrogram=True,
    cmap="Blues",
    standard_scale="var",
    colorbar_title="column scaled\nexpression",
)

另一个有用的选项是使用 sc.pp.scale 对基因表达进行标准化。在此,我们将这一结果存储在 scale 层中。随后我们调整图的最小值和最大值,并采用一条发散型色带(本例为 RdBu_r,其中 _r 表示反转)。

代码语言:javascript
代码运行次数:0
运行
复制
# scale and store results in layer
pbmc.layers["scaled"] = sc.pp.scale(pbmc, copy=True).X

sc.pl.matrixplot(
    pbmc,
    marker_genes_dict,
    "clusters",
    dendrogram=True,
    colorbar_title="mean z-score",
    layer="scaled",
    vmin=-2,
    vmax=2,
    cmap="RdBu_r",
)

Reference

[1]

Source: https://scanpy.readthedocs.io/en/stable/tutorials/basics/clustering-2017.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冷冻工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 基于已知标记基因识别细胞簇
  • dotplot
  • violin plot
  • stacked-violin plot
  • matrixplot
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档