将细胞注释信息导入 cellbin GEF 以在 StereoMap 中可视化

2026.04.17 内容来源:华大时空

简介

在标准的 STOmics 分析流程中,SAW 会生成包含基因表达矩阵和空间坐标的 Cellbin GEF 文件。虽然 SAW 提供了初步的聚类结果,但研究人员通常会使用第三方工具,如 Scanpy、Seurat,或专用算法,如 cell2location、RCTD(Robust Cell Type Decomposition),进行高级下游分析,以准确鉴别细胞类型或功能状态。

然而,这些精细的注释信息通常仅存在矩阵文件或静态图像中,与原始的空间数据是脱节的。这就导致用户无法利用 StereoMap 交互式可视化功能来查看重新定义的细胞类型。

本指南旨在填补这一空白,提供了一套分步工作流程,指导您将下游分析生成的自定义细胞注释重新导入到原始的 Cellbin GEF 文件中。

前置准备

在开始之前,请确保已准备好以下内容:

  • 运行环境:建议在  Jupyter Notebook 中执行此工作流;

  • Stereopy:确保已安装 Stereopy (>=1.0.0) (pip install stereopy);

  • SAW:需要访问 SAW 软件包(特别是 cellShape 工具);

  • 数据集

    • 包含细胞坐标和注释标签的注释文件(.h5ad 或 .csv)。

    • 输入 Cellbin GEF 文件 (.gef);

分布指南

Step 1: 加载 Cellbin GEF

首先,加载 GEF 文件并提取细胞的空间坐标。

import stereo as st
import pandas as pd
import numpy as np

# 1. 读取 cellbin GEF 文件
# 将 'input.cellbin.gef' 替换为您的实际文件路径
gef_path = "/path/to/input.cellbin.gef"
data = st.io.read_gef(gef_path, bin_type="cell_bins")

# 2. 将空间坐标 (x, y) 提取到 metadata DataFrame
# 这对于在文件之间匹配细胞至关重要
data.cells.to_df()['x'] = data.cells_matrix['spatial'][:, 0]
data.cells.to_df()['y'] = data.cells_matrix['spatial'][:, 1]

print(f"已加载 {data.cells.to_df().shape[0]} 个细胞。")

注意: 强烈建议在继续操作之前备份您的原始 Cellbin GEF 文件。

Step 2: 合并注释信息

加载注释文件,可以从 H5AD 文件或 CSV 文件导入数据。

Option A: 从 AnnData (.h5ad) 导入

# 加载注释信息
anno_path = "/path/to/annotation.h5ad"
anno = st.io.read_h5ad(anno_path, bin_type="cell_bins")

# 基于 x, y 坐标合并
# 确保 h5ad 文件中存在注释列(例如 'anno_rctd')
merged = data.cells.to_df()[['x', 'y']].merge(
   anno.cells.to_df()[['x', 'y', 'anno_rctd']],
   on=['x', 'y'],
   how='left'
)

# 将合并后的注释赋值给主数据对象
# 用 'others' 填充缺失值
data.cells.to_df()['anno_rctd'] = merged['anno_rctd'].fillna('others').values

Option B: 从 CSV (.csv) 导入

# 加载注释信息
csv_path = "/path/to/annotation.csv"
anno_df = pd.read_csv(csv_path)

# 检查您的 CSV 列名
# 在此示例中,我们假设列名为:'X coordinate', 'Y coordinate', 'Label name'
merged = data.cells.to_df()[['x', 'y']].merge(
   anno_df[['X coordinate', 'Y coordinate', 'Label name']],
   left_on=['x', 'y'],
   right_on=['X coordinate', 'Y coordinate'],
   how='left'
)

# 赋值注释
data.cells.to_df()['anno_rctd'] = merged['Label name'].fillna('others').values

Step 3: 更新 GEF 文件

将新的注释列写回 Cellbin GEF 文件。

# 使用新的聚类键更新原始 GEF 文件
st.io.update_gef(
   data=data,
   gef_file=gef_path,
   cluster_res_key="anno_rctd"  # 您在第 2 步中添加的列名
)
print("GEF 文件更新成功。")

Step 4: 生成预渲染可视化数据(关键步骤)

为了优化 StereoMap 的性能,此步骤将预先计算好的细胞边界(多边形)信息写入 GEF 文件。这能显著提升软件加载速度,因为 StereoMap 无需实时计算形状。此步骤使用 SAW 软件包中的 cellShape 脚本。

您可以直接在 Notebook 中运行此步骤,也可以通过标准终端运行。

Option 1: 在 Jupyter Notebook 中运行 使用 ! 魔法命令在 notebook 单元格中执行 shell 命令。

# 定义 SAW 和文件路径
# 请根据您的环境更新路径
saw_path = "/path/to/SAW/package/saw-8.1.3"
gef_file = "/path/to/input.cellbin.gef"

# 设置环境变量并运行脚本
!export HDF5_USE_FILE_LOCKING=FALSE
!export LD_LIBRARY_PATH={saw_path}/anaconda/lib:$LD_LIBRARY_PATH
!{saw_path}/anaconda/bin/python {saw_path}/lib/cellshape/cellShape.pyc -i {gef_file} -o {gef_file}

Option 2: 在 Shell / 终端中运行 如果您更喜欢使用命令行,请打开终端并运行以下命令:

# 1. 设置环境变量
export saw_path=/path/to/SAW/package/saw-8.1.3
export LD_LIBRARY_PATH=${saw_path}/anaconda/lib:$LD_LIBRARY_PATH
export HDF5_USE_FILE_LOCKING=FALSE

# 2. 运行 cellShape 脚本
${saw_path}/anaconda/bin/python ${saw_path}/lib/cellshape/cellShape.pyc \
   -i /path/to/input.cellbin.gef \
   -o /path/to/input.cellbin.gef

Step 5: 在 StereoMap 中可视化

启动 StereoMap 并加载更新后的 .gef 文件。在右侧控制面板中,找到 Clustering(聚类) 或 Annotation(注释)下拉菜单,即可查看新添加的注释。

微信图片_20260417143552_382_8