Tangram 空間轉錄組教程(二)

前文提到Tangram在基于mapping的步驟,有兩種方式:

  • mode = "cluster":速度快古徒,占用內(nèi)存少,適用于空轉和單細胞數(shù)據(jù)來自不同樣本情況下。
  • mode = "cell": 占用內(nèi)存大撑刺,每個cell進行匹配,可以mapping到空轉沒有抓到的轉錄本握玛。

由于受限于空間轉錄組(包括 Visium 和 Slide-seq技術)的分辨度够傍,每個voxel(spot)通常包含多個單細胞,針對這一情況挠铲,采用去卷積的方法去推斷細胞組成顯得尤為重要冕屯。

去卷積是分析中亟需的技術,但很難獲取到確切的結果拂苹。如果你只是想推斷兩種細胞的空間分布共定位關系安聘,建議用Mapping的方法即可。如果你是想推斷細胞間的通訊連接乃至機制瓢棒,建議使用project_cell_annotations來在空間上可視化相應的模塊(program usage)浴韭。以下是細胞去卷積的步驟:
tangram首先需要知道voxel中包含多少細胞,這可以從對應的組織學圖片上通過分割得到脯宿,squidpy通過兩句代碼完成:squidpy.im.process進行平滑處理念颈,squidpy.im.segment使用watershed算法進行分割。需要關注的是有些空轉技術连霉,比如Slide-seq舍肠,不能在對應的經(jīng)測序的切片上進行染色。針對這些數(shù)據(jù)窘面,我們用粗略的方式估計細胞密度翠语,傳入uniform 到density_prior。最后需要注意的是财边,我們很難去驗證去卷積的結果肌括,因為我們得不到真實的單細胞空間分布情況。

sq.im.process(img=img, layer="image", method="smooth")
sq.im.segment(
    img=img,
    layer="image_smooth",
    method="watershed",
    channel=0,
)

顯示框選小圖的細胞分割情況
比較DAPI染色和Mask的結果確認分割的質量酣难。

inset_y = 1500
inset_x = 1700
inset_sy = 400
inset_sx = 500

fig, axs = plt.subplots(1, 3, figsize=(30, 10))
sc.pl.spatial(
    adata_st, color="cluster", alpha=0.7, frameon=False, show=False, ax=axs[0], title=""
)
axs[0].set_title("Clusters", fontdict={"fontsize": 20})
sf = adata_st.uns["spatial"]["V1_Adult_Mouse_Brain_Coronal_Section_2"]["scalefactors"][
    "tissue_hires_scalef"
]
rect = mpl.patches.Rectangle(
    (inset_y * sf, inset_x * sf),
    width=inset_sx * sf,
    height=inset_sy * sf,
    ec="yellow",
    lw=4,
    fill=False,
)
axs[0].add_patch(rect)

axs[0].axes.xaxis.label.set_visible(False)
axs[0].axes.yaxis.label.set_visible(False)

axs[1].imshow(
    img["image"][inset_y : inset_y + inset_sy, inset_x : inset_x + inset_sx, 0, 0]
    / 65536,
    interpolation="none",
)
axs[1].grid(False)
axs[1].set_xticks([])
axs[1].set_yticks([])
axs[1].set_title("DAPI", fontdict={"fontsize": 20})

crop = img["segmented_watershed"][
    inset_y : inset_y + inset_sy, inset_x : inset_x + inset_sx
].values.squeeze(-1)
crop = skimage.segmentation.relabel_sequential(crop)[0]
cmap = plt.cm.plasma
cmap.set_under(color="black")
axs[2].imshow(crop, interpolation="none", cmap=cmap, vmin=0.001)
axs[2].grid(False)
axs[2].set_xticks([])
axs[2].set_yticks([])
axs[2].set_title("Nucleous segmentation", fontdict={"fontsize": 20});

接著我們需要去提前圖片中分割成的細胞核單元的特征:每個spot下的分割單元(segmentation object)以及分割單元質心對應的坐標谍夭。

# define image layer to use for segmentation
features_kwargs = {
    "segmentation": {
        "label_layer": "segmented_watershed",
        "props": ["label", "centroid"],
        "channels": [1, 2],
    }
}
# calculate segmentation features
sq.im.calculate_image_features(
    adata_st,
    img,
    layer="image",
    key_added="image_features",
    features_kwargs=features_kwargs,
    features="segmentation",
    mask_circle=True,
)

計算及顯示每個spot下segmentation object的數(shù)量

adata_st.obs["cell_count"] = adata_st.obsm["image_features"]["segmentation_label"]
sc.pl.spatial(adata_st, color=["cluster", "cell_count"], frameon=False)

Deconvolution via alignment

tangram進行去卷積的核心原理是限制每個voxel中mapped單細胞表達譜的數(shù)量,這是與其他去卷積方法的不同之處憨募。
實現(xiàn)方式是在map_cells_to_space函數(shù)中傳入map_cells_to_space紧索,這將在損失函數(shù)中加入過濾步驟,并進行布爾正則化處理菜谣,接著在``target_count中傳入所有細胞核(segmentation object)的數(shù)量珠漂,density_prior```來傳入每個voxel中的segmentation object晚缩。

ad_map = tg.map_cells_to_space(
    adata_sc,
    adata_st,
    mode="constrained",
    target_count=adata_st.obs.cell_count.sum(),
    density_prior=np.array(adata_st.obs.cell_count) / adata_st.obs.cell_count.sum(),
    num_epochs=1000,
#     device="cuda:0",
    device='cpu',
)

同前面一樣,可以顯示不同細胞類型的空間分布媳危。

tg.project_cell_annotations(ad_map, adata_st, annotation="cell_subclass")
annotation_list = list(pd.unique(adata_sc.obs['cell_subclass']))
tg.plot_cell_annotation_sc(adata_st, annotation_list, perc=0.02)

同樣可以通過檢測test基因判斷mapping的情況

ad_ge = tg.project_genes(adata_map=ad_map, adata_sc=adata_sc)
df_all_genes = tg.compare_spatial_geneexp(ad_ge, adata_st, adata_sc)
tg.plot_auc(df_all_genes);

##################################################
接著是核心部分:
在前面去卷積部分中我們的都每個spot中獨特segmentation object的數(shù)目以及質心坐標荞彼。我們在數(shù)據(jù)框中顯示這些關鍵信息,每一行代表segmentation object (a cell)待笑,表格顯示每個細胞的unique centroid ID鸣皂,包含spot ID和數(shù)字index。

tg.create_segment_cell_df(adata_st)
adata_st.uns["tangram_cell_segmentation"].head()

使用tangram.count_cell_annotation()暮蹂,其利用去卷積的結果來對每個segmentation ID映射相應的細胞類型寞缝。

tg.count_cell_annotations(
    ad_map,
    adata_sc,
    adata_st,
    annotation="cell_subclass",
)
adata_st.obsm["tangram_ct_count"].head()

將結果提取成新的AnnData對象

adata_segment = tg.deconvolve_cell_annotations(adata_st)
adata_segment.obs.head()

該AnnData對象不包含細胞數(shù)量,只包含細胞類型的注釋仰泻,即tangram映射的結果荆陆,這更方便進行可視化。在下圖中你會發(fā)現(xiàn)我纪,每個點并不代表spot慎宾,而是代表每個segmentation object丐吓。

fig, ax = plt.subplots(1, 1, figsize=(20, 20))
sc.pl.spatial(
    adata_segment,
    color="cluster",
    size=0.4,
    show=False,
    frameon=False,
    alpha_img=0.2,
    legend_fontsize=20,
    ax=ax,
)
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浅悉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子券犁,更是在濱河造成了極大的恐慌术健,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粘衬,死亡現(xiàn)場離奇詭異荞估,居然都是意外死亡,警方通過查閱死者的電腦和手機稚新,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門勘伺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人褂删,你說我怎么就攤上這事飞醉。” “怎么了屯阀?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵缅帘,是天一觀的道長。 經(jīng)常有香客問我难衰,道長钦无,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任盖袭,我火速辦了婚禮失暂,結果婚禮上彼宠,老公的妹妹穿的比我還像新娘。我一直安慰自己趣席,他們只是感情好兵志,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宣肚,像睡著了一般想罕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霉涨,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天按价,我揣著相機與錄音,去河邊找鬼笙瑟。 笑死楼镐,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的往枷。 我是一名探鬼主播框产,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼错洁!你這毒婦竟也來了秉宿?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤屯碴,失蹤者是張志新(化名)和其女友劉穎描睦,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體导而,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡忱叭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了今艺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片韵丑。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖虚缎,靈堂內(nèi)的尸體忽然破棺而出撵彻,到底是詐尸還是另有隱情,我是刑警寧澤遥巴,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布千康,位于F島的核電站,受9級特大地震影響铲掐,放射性物質發(fā)生泄漏拾弃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一摆霉、第九天 我趴在偏房一處隱蔽的房頂上張望豪椿。 院中可真熱鬧奔坟,春花似錦、人聲如沸搭盾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸯隅。三九已至澜建,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蝌以,已是汗流浹背炕舵。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留跟畅,地道東北人咽筋。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像徊件,于是被迫代替她去往敵國和親奸攻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容