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

如何为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:38:07