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

简介: 单细胞分析: Scanpy 核心绘图 (3)

引言

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

Combining plots in subplots

一个坐标轴(axis)可以传递给绘图函数,从而把多个输出合并到同一个图中,如下例所示。

import matplotlib.pyplot as plt

fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(20, 4), gridspec_kw={
   "wspace": 0.9})

ax1_dict = sc.pl.dotplot(
    pbmc, marker_genes_dict, groupby="bulk_labels", ax=ax1, show=False
)
ax2_dict = sc.pl.stacked_violin(
    pbmc, marker_genes_dict, groupby="bulk_labels", ax=ax2, show=False
)
ax3_dict = sc.pl.matrixplot(
    pbmc, marker_genes_dict, groupby="bulk_labels", ax=ax3, show=False, cmap="viridis"
)

Heatmaps

Heatmaps 不会像前面的图那样把细胞合并。相反,每个细胞分别显示为一行(如果 swap_axes=True,则为一列)。可以添加 groupby 信息,并使用与 sc.pl.umap 或其他嵌入图相同的色码来表示。

ax = sc.pl.heatmap(
    pbmc, marker_genes_dict, groupby="clusters", cmap="viridis", dendrogram=True
)

Heatmap 也可以在经过缩放的数据上绘制。在下一幅图中,与之前的 matrixplot 类似,最小值和最大值被调整,并使用了发散型色图。

ax = sc.pl.heatmap(
    pbmc,
    marker_genes_dict,
    groupby="clusters",
    layer="scaled",
    vmin=-2,
    vmax=2,
    cmap="RdBu_r",
    dendrogram=True,
    swap_axes=True,
    figsize=(11, 4),
)

Tracksplot

Track plot 显示的信息与 heatmap 相同,不同的是用高度而不是色阶来表示基因表达量。

ax = sc.pl.tracksplot(pbmc, marker_genes_dict, groupby="clusters", dendrogram=True)

Visualization of marker genes

与之前用已知基因标记来刻画细胞簇不同,我们可以找出在细胞簇或组别中差异表达的基因。

为了识别差异表达基因,我们运行 sc.tl.rank_genes_groups。该函数会依次取每一组细胞,将该组内每个基因的分布与该组外所有细胞的分布进行比较。这里,我们将使用 10x 提供的原始细胞标签,为这些细胞类型找出标记基因。

sc.tl.rank_genes_groups(pbmc, groupby="clusters", method="wilcoxon")

Visualize marker genes using dotplot

dotplot 可视化有助于快速浏览差异表达基因。为了让结果更紧凑,我们设置 n_genes=4,仅展示得分最高的 4 个基因。

sc.pl.rank_genes_groups_dotplot(pbmc, n_genes=4)

为了获得更好的展示效果,我们可以绘制 log fold changes 而非基因表达量。同时,我们希望只关注在某一细胞类型与其余细胞之间 log fold change ≥ 3 的基因。

此时,我们将参数 values_to_plot 设为 'logfoldchanges',并将 min_logfoldchange 设为 3。

由于 log fold change 是一个发散型尺度,我们同样调整了待绘制的最小值与最大值,并使用发散型色图。请注意,在随后的图中,要区分不同的 T-cell 群体相当困难。

sc.pl.rank_genes_groups_dotplot(
    pbmc,
    n_genes=4,
    values_to_plot="logfoldchanges",
    min_logfoldchange=3,
    vmax=7,
    vmin=-7,
    cmap="bwr",
)

Focusing on particular groups

接下来,我们使用 dotplot 仅聚焦在两个组别上(violin、heatmap 和 matrixplot 同样支持 groups 选项)。在此,我们将 n_genes 设为 30,因为此时它会展示所有满足 min_logfoldchange=4 的基因,最多到 30 个。

sc.pl.rank_genes_groups_dotplot(
    pbmc,
    n_genes=30,
    values_to_plot="logfoldchanges",
    min_logfoldchange=4,
    vmax=7,
    vmin=-7,
    cmap="bwr",
    groups=["3", "7"],
)

Visualize marker genes using matrixplot

在随后的图中,我们使用先前计算好的 ‘scaled’ 值(存储在 layer scaled 中)并采用一条发散型色图。

sc.pl.rank_genes_groups_matrixplot(
    pbmc, n_genes=3, use_raw=False, vmin=-3, vmax=3, cmap="bwr", layer="scaled"
)

Visualize marker genes using stacked violin plots

sc.pl.rank_genes_groups_stacked_violin(pbmc, n_genes=3, cmap="viridis_r")

Visualize marker genes using heatmap

sc.pl.rank_genes_groups_heatmap(
    pbmc,
    n_genes=3,
    use_raw=False,
    swap_axes=True,
    vmin=-3,
    vmax=3,
    cmap="bwr",
    layer="scaled",
    figsize=(10, 7),
    show=False,
);

每类展示 10 个基因,关闭基因标签,并交换坐标轴。请注意,当图像交换后,类别会以颜色代码显示,而不再使用 ‘brackets’。

sc.pl.rank_genes_groups_heatmap(
    pbmc,
    n_genes=10,
    use_raw=False,
    swap_axes=True,
    show_gene_labels=False,
    vmin=-3,
    vmax=3,
    cmap="bwr",
)

Visualize marker genes using tracksplot

sc.pl.rank_genes_groups_tracksplot(pbmc, n_genes=3)

Comparison of marker genes using split violin plots

在 scanpy 里,只需一行命令,就能用“对半开”的小提琴图一次性把所有组的标记基因并排比较。

with rc_context({
   "figure.figsize": (9, 1.5)}):
    sc.pl.rank_genes_groups_violin(pbmc, n_genes=20, jitter=False)

Dendrogram options

大多数可视化都能通过 dendrogram 来排列类别。然而,dendrogram 也可以单独绘制,如下所示:

# compute hierarchical clustering using PCs (several distance metrics and linkage methods are available).
sc.tl.dendrogram(pbmc, "bulk_labels")

ax = sc.pl.dendrogram(pbmc, "bulk_labels")

Plot correlation

与 dendrogram 一起,还可以绘制类别间的相关性(默认使用 ‘pearson’ 相关系数)。

ax = sc.pl.correlation_matrix(pbmc, "bulk_labels", figsize=(5, 3.5))

相关文章
|
2月前
|
存储 数据可视化 数据挖掘
单细胞分析: Scanpy 核心绘图 (1)
单细胞分析: Scanpy 核心绘图 (1)
|
存储 Python
海明距离(Hamming Distance)
海明距离(Hamming Distance)是用来衡量两个二进制数之间差异程度的指标,它表示两个二进制数之间最多有多少个比特的差异。海明距离可以用于衡量数据传输或存储中的错误率,以及检测噪声干扰。 海明距离的计算方法是:对于两个 n 位二进制数,将它们进行逐位比较,如果对应位上的数字不同,则计算距离时增加 1。然后将所有位上的距离加在一起,得到海明距离。
2508 1
|
1月前
|
监控 Linux 数据安全/隐私保护
Python实现Word转PDF全攻略:从入门到实战
在数字化办公中,Python实现Word转PDF自动化,可大幅提升处理效率,解决格式兼容问题。本文详解五种主流方案,包括跨平台的docx2pdf、Windows原生的pywin32、服务器部署首选的LibreOffice命令行、企业级的Aspose.Words,以及轻量级的python-docx+pdfkit组合。每种方案均提供核心代码与适用场景,并涵盖中文字体处理、表格优化、批量进度监控等实用技巧,助力高效办公自动化。
344 0
|
3月前
|
数据安全/隐私保护 Android开发 Windows
2025 年三款免费高清无水印视频录制工具推荐合集
本文介绍了三款免费高清录屏软件:EVCapture、Bandicam 和 屏幕录像机(oCam)。EVCapture 功能强大,支持视频录制与直播,提供分屏录制、实时按键显示等;Bandicam 适合游戏录屏,可自定义录制区域并添加Logo,还支持音频和摄像头设置;oCam 小巧灵活,支持多种视频格式(如GIF、MP4等)及音频、截图功能。三者均无水印,画质清晰,满足不同录屏需求。资源地址已提供,可供下载体验。
2509 0
|
Shell Android开发
RK android13编译环境搭建与常用编译命令
RK android13编译环境搭建与常用编译命令
541 0
|
11月前
|
数据采集 文字识别 数据安全/隐私保护
轻松抓取:用 requests 库处理企业招聘信息中的联系方式
本文详细介绍如何利用Python的`requests`库结合代理IP技术,突破Boss直聘的登录验证与反爬虫机制,抓取企业招聘信息中的联系方式。文章首先阐述了Boss直聘数据抓取面临的挑战,随后介绍了代理IP轮换、登录会话保持及请求头伪装等关键技术。通过一个完整的示例代码,展示了从配置代理、模拟登录到解析HTML获取联系方式的具体步骤。此方法不仅适用于Boss直聘,还可扩展至其他需登录权限的网站抓取任务。
967 0
轻松抓取:用 requests 库处理企业招聘信息中的联系方式
|
XML 存储 网络安全
ROS入门(二):launch文件解析
该文章是关于ROS入门的第二篇教程,详细解析了ROS中的launch文件,包括其运行方式、XML格式规范、标签使用、参数替代、条件属性以及通过简单和复杂案例来演示launch文件的使用,最后介绍了如何在参数服务器上设置参数。
ROS入门(二):launch文件解析
|
数据可视化 Java 数据处理
单细胞|RNA-seq & ATAC-seq 联合分析
单细胞|RNA-seq & ATAC-seq 联合分析
|
搜索推荐 Docker 容器
生信分析代码之前还好好的,怎么就报错了 Error in Ops. data. frame(guide_loc, panel_loc) :'==' only defined for equally-sized data frames
执行 `DimPlot` 函数时遇到错误 `;Error in Ops. data. frame(g guides_loc, panel_loc) : '==' only defined for equally-sized data frames`。解决方案和办法
2209 0
生信分析代码之前还好好的,怎么就报错了 Error in Ops. data. frame(guide_loc, panel_loc) :'==' only defined for equally-sized data frames