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

如何将scanpy sc.pl.umap生成的多个ax对象合并为含子图的单张图像

scanpy多UMAP结果合并为单张图像的实现方法

核心逻辑是直接给sc.pl.umap传入预先创建的子图坐标系对象,无需单独生成ax后再二次拼接,具体操作步骤如下:

1. 依赖导入

先导入需要的库:

import scanpy as sc
import matplotlib.pyplot as plt

2. 基础实现(2个UMAP并排示例)

# 第一步:创建画布和子图对象,1行2列,可自行调整行数、列数、画布尺寸
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(12, 5))

# 第二步:分别给两个数据集绘制UMAP,传入对应子图的ax参数,show必须设为False
# 绘制第一个数据集的UMAP,指定到第一个子图axes[0]
sc.pl.umap(
    adata1, 
    color="cell_type", # 可换成你要展示的分组、基因表达等字段
    ax=axes[0], 
    show=False,
    title="数据集1"
)

# 绘制第二个数据集的UMAP,指定到第二个子图axes[1]
sc.pl.umap(
    adata2, 
    color="cell_type",
    ax=axes[1], 
    show=False,
    title="数据集2",
    # 如需统一图例可加下面参数隐藏第二个图的图例
    # legend_loc=None
)

# 第三步:调整子图间距,避免标签、图例重叠
plt.tight_layout()

# 可选操作:直接保存为图片
plt.savefig("combined_umap.png", dpi=300, bbox_inches="tight")

# 你需要的统一图像对象就是前面创建的fig,可直接用于后续编辑

3. 扩展说明

  • 如果需要生成多行多列的UMAP组合图,调整plt.subplots的nrows、ncols参数即可,二维子图的索引格式为axes[行索引, 列索引],比如2行2列的第一个子图对应axes[0,0]
  • 如需统一全局图例,只需保留第一个图的图例,其余子图绘制时添加legend_loc=None参数隐藏自有图例,再根据需求调用fig.legend()手动添加全局图例即可
  • 如果已经单独生成了单个UMAP的ax对象,也可以通过fig.add_axes(ax)的方式将其添加到统一画布中,适配性更强但需要自行调整坐标避免重叠

内容的提问来源于stack exchange,提问作者hgmhgm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:12:00