單細(xì)胞空間轉(zhuǎn)錄分析之Scanpy-多樣本整合

和Seurat一樣,Scanpy也提供了多樣本空轉(zhuǎn)數(shù)據(jù)的整合
https://scanpy-tutorials.readthedocs.io/en/latest/spatial/integration-scanorama.html

Scanpy

單細(xì)胞空間轉(zhuǎn)錄分析之Scanpy:http://www.itdecent.cn/p/8dc231c06932
單細(xì)胞空間轉(zhuǎn)錄分析之Scanpy-多樣本整合:http://www.itdecent.cn/p/caa98aeac191
單細(xì)胞空間轉(zhuǎn)錄分析之Seurat:http://www.itdecent.cn/p/c9a601ced91f
單細(xì)胞空間轉(zhuǎn)錄分析之Seurat-多樣本整合(淺談空間批次):http://www.itdecent.cn/p/609b04096b79

這是也使用了10X官網(wǎng),下載獲得小鼠大腦同一張切片前端和后端空轉(zhuǎn)數(shù)據(jù),包括anterior1,posterior1。https://support.10xgenomics.com/spatial-gene-expression/datasets/1.1.0/V1_Mouse_Brain_Sagittal_Anterior
https://support.10xgenomics.com/spatial-gene-expression/datasets/1.1.0/V1_Mouse_Brain_Sagittal_Posterior
導(dǎo)入相關(guān)包

import scanpy as sc
import anndata as an
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import scanorama
sc.logging.print_versions()
sc.set_figure_params(facecolor="white", figsize=(8, 8))
sc.settings.verbosity = 3
##設(shè)置輸入路徑
import os 
os.chdir('./scanpy/Integrate') ##修改路徑
results_file = 'integrat_spatial.h5ad' ##設(shè)置結(jié)果文件保存路徑

讀取數(shù)據(jù),標(biāo)準(zhǔn)化

adata_spatial_anterior1 = sc.read_visium("./Mouse/Brain_Section1_Sagittal_Anterior/Brain_anterior1/outs")
adata_spatial_posterior1 = sc.read_visium("./Mouse/Brain_Section1_Sagittal_Posterior/Brain_posterior1/outs")
adata_spatial_anterior1.var_names_make_unique()
adata_spatial_posterior1.var_names_make_unique()
sc.pp.calculate_qc_metrics(adata_spatial_anterior1, inplace=True)
sc.pp.calculate_qc_metrics(adata_spatial_posterior1, inplace=True)
for name, adata in [
    ("anterior", adata_spatial_anterior1),
    ("posterior", adata_spatial_posterior1),
]:
    fig, axs = plt.subplots(1, 4, figsize=(20, 4))
    fig.suptitle(f"Covariates for filtering: {name}")
    sns.distplot(adata.obs["total_counts"], kde=False, bins=60, ax=axs[0])
    sns.distplot(adata.obs["total_counts"][adata.obs["total_counts"] < 20000],kde=False, bins=60,ax=axs[1],)
    sns.distplot(adata.obs["n_genes_by_counts"], kde=False, bins=60, ax=axs[2])
    sns.distplot(adata.obs["n_genes_by_counts"][adata.obs["n_genes_by_counts"] < 4000],kde=False,bins=60,ax=axs[3], )
    plt.savefig(f"QC_plot_{name}.pdf")

for adata in [
    adata_spatial_anterior1,
    adata_spatial_posterior1,
]:
    sc.pp.normalize_total(adata, inplace=True)
    sc.pp.log1p(adata)
    sc.pp.highly_variable_genes(adata, flavor="seurat", n_top_genes=2000, inplace=True)
anterior

posterior

Scanorama數(shù)據(jù)整合

adatas = [adata_spatial_anterior1,adata_spatial_posterior1]
adatas_cor = scanorama.correct_scanpy(adatas, return_dimred=True)
adata_spatial = adatas_cor[0].concatenate(
    adatas_cor[1],
    batch_key="library_id",
    uns_merge="unique",
    batch_categories=[
        k
        for d in [
            adatas_cor[0].uns["spatial"],
            adatas_cor[1].uns["spatial"],
        ]
        for k, v in d.items()
    ],
)
sc.pp.neighbors(adata_spatial, use_rep="X_scanorama")
sc.tl.umap(adata_spatial)
sc.tl.leiden(adata_spatial, key_added="clusters")
sc.pl.umap(adata_spatial, color=["clusters", "library_id"], palette=sc.pl.palettes.default_20)
plt.savefig("umap.pdf")

clusters_colors = dict(
    zip([str(i) for i in range(18)], adata_spatial.uns["clusters_colors"])
)
fig, axs = plt.subplots(1, 2, figsize=(15, 10))

for i, library in enumerate(
    ['Brain_anterior1','Brain_posterior1']
):
    ad = adata_spatial[adata_spatial.obs.library_id == library, :].copy()
    sc.pl.spatial(
        ad,
        img_key="hires",
        library_id=library,
        color="clusters",
        size=1.5,
        palette=[
            v
            for k, v in clusters_colors.items()
            if k in ad.obs.clusters.unique().tolist()
        ],
        legend_loc=None,
        show=False,
        ax=axs[i],
    )

plt.tight_layout()
plt.savefig("spatial.pdf")
umap
spatial

相比Seurat merge直接整合,我們可以看到Scanpy去掉了部分批次,兩張切片連接處有所改善。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容