Scanpy中热图标记基因标签优化技巧
2025-07-04 01:52:09作者:谭伦延
在单细胞RNA测序数据分析中,热图(heatmap)是展示不同细胞群间差异表达基因的常用可视化方法。Scanpy作为单细胞分析的主流工具,其sc.pl.rank_genes_groups_heatmap函数能够直观展示各细胞群的标记基因表达模式。然而当展示大量基因时,基因标签会过于密集,影响可视化效果和解读。
问题背景
当使用sc.pl.rank_genes_groups_heatmap函数展示500个基因时,默认设置会使所有基因标签都显示在热图上,导致标签重叠严重,难以辨认特定感兴趣的基因。这种情况在分析大型单细胞数据集时尤为常见。
解决方案
方法一:限制展示基因数量
最直接的解决方法是减少展示的基因数量,直到标签清晰可读:
sc.pl.rank_genes_groups_heatmap(
adata,
n_genes=50, # 减少展示基因数量
key='rank_genes_r1',
groupby='leiden_r1',
show_gene_labels=True,
cmap='bwr',
use_raw=False,
dendrogram=True,
vmin=-1, vmax=1,
figsize=(15, 10)
这种方法简单有效,但缺点是会丢失部分基因表达信息。
方法二:自定义标签显示
更灵活的方法是使用Matplotlib的底层功能自定义标签显示:
import matplotlib.pyplot as plt
# 创建图形对象
fig, ax = plt.subplots(figsize=(15, 10))
# 绘制热图
sc.pl.rank_genes_groups_heatmap(
adata,
n_genes=500,
key='rank_genes_r1',
groupby='leiden_r1',
show_gene_labels=True,
cmap='bwr',
use_raw=False,
dendrogram=True,
vmin=-1, vmax=1,
ax=ax)
# 获取并修改x轴标签
labels = ax.get_xticklabels()
for i, label in enumerate(labels):
if label.get_text() not in ['gene1', 'gene2', 'gene3']: # 只保留感兴趣的基因
label.set_visible(False)
plt.show()
这种方法可以精确控制哪些基因标签显示,同时保留所有基因的表达数据在热图中。
进阶技巧
结合基因筛选
在实际分析中,可以先筛选出感兴趣的基因子集,再绘制热图:
# 假设interesting_genes是预先筛选的基因列表
interesting_genes = ['CD3D', 'CD4', 'CD8A', 'MS4A1', 'CD14']
# 获取所有差异表达基因
marker_genes = adata.uns['rank_genes_r1']['names']
# 筛选出感兴趣的基因在所有群组中的位置
selected_indices = []
for i in range(marker_genes.shape[1]):
group_genes = marker_genes[:, i]
selected_indices.extend([j for j, gene in enumerate(group_genes) if gene in interesting_genes])
# 绘制热图时只显示这些基因
使用基因分组
对于大型基因集,可以考虑按功能分组展示:
# 定义基因功能分组
gene_groups = {
'T细胞标记': ['CD3D', 'CD3E', 'CD3G', 'CD4', 'CD8A', 'CD8B'],
'B细胞标记': ['MS4A1', 'CD19', 'CD79A', 'CD79B'],
'髓系标记': ['CD14', 'FCGR3A', 'LYZ', 'CST3']
}
# 为每个功能组单独绘制热图
for group_name, genes in gene_groups.items():
print(f"绘制{group_name}热图")
sc.pl.rank_genes_groups_heatmap(
adata,
gene_names=genes,
key='rank_genes_r1',
groupby='leiden_r1',
show_gene_labels=True,
title=group_name,
figsize=(10, 6))
总结
在Scanpy中优化热图基因标签显示有多种方法,从简单的减少展示基因数量,到复杂的自定义标签显示和基因分组展示。选择哪种方法取决于具体分析需求和数据集规模。对于初步探索,限制基因数量可能更合适;而对于发表级图表,自定义标签或分组展示能提供更专业的结果呈现。
掌握这些技巧可以显著提升单细胞数据分析结果的可视化质量,使重要发现更清晰地展现出来。
登录后查看全文
热门项目推荐
相关项目推荐
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
ruoyi-plus-soybeanRuoYi-Plus-Soybean 是一个现代化的企业级多租户管理系统,它结合了 RuoYi-Vue-Plus 的强大后端功能和 Soybean Admin 的现代化前端特性,为开发者提供了完整的企业管理解决方案。Vue06- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00
项目优选
收起
deepin linux kernel
C
27
11
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
574
3.85 K
Ascend Extension for PyTorch
Python
388
464
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
895
687
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
355
216
昇腾LLM分布式训练框架
Python
121
147
暂无简介
Dart
807
199
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
12
1
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
68
20
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.38 K
782