如何为Scanpy绘制的UMAP添加数值坐标轴并修复空图问题
UMAP绘图问题修复:空图与坐标轴刻度显示
问题背景
用户通过CD45RA表达量标记区分细胞群并绘制UMAP,遇到两个问题:
- 完整代码执行后生成空UMAP图
- 仅执行
sc_pl.umap(adata_all, color='cell_type_lvl0')能显示图,但X/Y轴无数值刻度
问题1:空UMAP图的修复
原因
sc_pl.umap()的ax参数传入True是错误用法——该参数需要接收matplotlib的Axes对象,而非布尔值。传入True会导致scanpy无法正确绑定绘图区域,最终生成空图。
修正方式
创建画布时直接获取Axes对象,将其传入ax参数:
# 替换原画布创建代码 fig, ax = plt.subplots(figsize=(8, 8))
问题2:坐标轴无刻度的修复
原因
scanpy默认隐藏UMAP图的坐标轴刻度,需手动开启显示。
修正方式
绘图后通过Axes对象开启刻度显示,同时设置标签和刻度大小:
# 开启刻度并设置属性 ax.tick_params(axis='both', which='both', labelsize=10, bottom=True, left=True)
若希望全局生效,可在绘图前添加:
import scanpy as sc sc.settings.set_figure_params(frameon=True) # 全局显示坐标轴框架与刻度
完整修正代码
# 细胞群标记处理 adata_all.obs["cell_type_lvl0"] = adata_all.X[:, adata_all.var["marker"] == 'CD45RA'] > 0.5 adata_all.obs["cell_type_lvl0"] = adata_all.obs["cell_type_lvl0"].map( {True: "CD45+", False: "CD45-"} ) import matplotlib.pyplot as plt import scanpy.plotting as sc_pl import scanpy as sc # 可选:全局开启坐标轴框架显示 sc.settings.set_figure_params(frameon=True, dpi=100) # 创建画布与Axes fig, ax = plt.subplots(figsize=(8, 8)) # 绘制UMAP sc_pl.umap(adata_all, color='cell_type_lvl0', ax=ax) # 设置坐标轴属性 ax.set_xlabel('UMAP 1', fontsize=12) ax.set_ylabel('UMAP 2', fontsize=12) ax.tick_params(axis='both', labelsize=10) plt.show()
内容的提问来源于stack exchange,提问作者minoo
相关产品推荐
相关产品推荐

