10X空间转录组分析之stlearn联合harmony整合多个空
2022-02-12 本文已影响0人
单细胞空间交响乐
周六了,放松一下,简单学习一下用harmony来整合空间转录组数据,很简单,大家看一眼就会明白。
import stlearn as st
import scanpy as sc
import numpy as np
st.settings.set_figure_params(dpi=150)
读取数据,10XSpaceranger的结果
block1 = st.Read10X("SECTION_A_PATH")
block2 = st.Read10X("SECTION_B_PATH")
前处理
# concatenate 2 samples
adata_concat = block1.concatenate(block2)
# Preprocessing
# Filter genes
sc.pp.filter_genes(adata_concat, min_cells=3)
# Normalize data
sc.pp.normalize_total(adata_concat, target_sum=1e4)
# Log transformation
sc.pp.log1p(adata_concat)
# Store raw data
adata_concat.raw = adata_concat
# Extract top highly variable genes
sc.pp.highly_variable_genes(adata_concat, min_mean=0.0125, max_mean=3, min_disp=0.5)
adata_concat = adata_concat[:, adata_concat.var.highly_variable]
# Scale data
sc.pp.scale(adata_concat, max_value=10)
# Run dimensionality reduction
sc.pp.pca(adata_concat, n_comps=30, svd_solver='arpack')
Run integration with harmony
# Prepare metadata and PCA
meta_data = adata_concat.obs
data_mat = adata_concat.obsm["X_pca"]
# Import and run harmony
import harmonypy as hm
ho = hm.run_harmony(data_mat, meta_data, "batch")
# Mapping back the result to the adata object
adata_concat.obsm["X_pca"] = ho.Z_corr.T
Perform clustering and visualize the results by UMAP
# Build KNN and run UMAP
sc.pp.neighbors(adata_concat, n_pcs =30)
sc.tl.umap(adata_concat)
# Run clustering with leiden
sc.tl.leiden(adata_concat, resolution=0.4)
# Plotting UMAP
sc.pl.umap(adata_concat, color=["batch","leiden"])
![](https://img.haomeiwen.com/i18814178/436152eb137c3d94.png)
Map the result back to the original samples
st.settings.set_figure_params(dpi=150)
# Map leiden clusteirng result to block A section 1
block1.obs["leiden"] = adata_concat.obs[adata_concat.obs.batch=="0"].leiden.values
# Plotting the clusteirng result
st.pl.cluster_plot(block1,use_label="leiden")
![](https://img.haomeiwen.com/i18814178/e7fe20642fb96fc5.png)
# Map leiden clusteirng result to block A section 2
block2.obs["leiden"] = adata_concat.obs[adata_concat.obs.batch=="1"].leiden.values
# Plotting the clusteirng result
st.pl.cluster_plot(block2,use_label="leiden")
![](https://img.haomeiwen.com/i18814178/48b6761fc1241030.png)
Manually combine the images and change the coordinates
# Initialize the spatial
adata_concat.uns["spatial"] = block1.uns["spatial"]
# Horizontally stack 2 images from section 1 and section 2 datasets
combined = np.hstack([block1.uns["spatial"]["V1_Breast_Cancer_Block_A_Section_1"]["images"]["hires"],
block2.uns["spatial"]["V1_Breast_Cancer_Block_A_Section_2"]["images"]["hires"]])
# Map the image to the concatnated adata object
adata_concat.uns["spatial"]["V1_Breast_Cancer_Block_A_Section_1"]["images"]["hires"] = combined
# Manually change the coordinate of spots to the right
adata_concat.obs.loc[adata_concat.obs.batch == "1","imagecol"] = adata_concat.obs.loc[adata_concat.obs.batch == "1","imagecol"].values + 2000
# Change to the .obsm["spatial"]
factor = adata_concat.uns["spatial"]["V1_Breast_Cancer_Block_A_Section_1"]["scalefactors"]["tissue_hires_scalef"]
adata_concat.obsm["spatial"] = adata_concat.obs[["imagecol","imagerow"]].values / factor
st.settings.set_figure_params(dpi=200)# Plot the gene
st.pl.gene_plot(adata_concat, gene_symbols="KRT5",crop=False, size=1.4,cell_alpha=1)
![](https://img.haomeiwen.com/i18814178/df863d39e95a9012.png)
# Plot the clusters
st.pl.cluster_plot(adata_concat, use_label="leiden", crop=False, size=1.4,cell_alpha=1)
![](https://img.haomeiwen.com/i18814178/f98c0dee8632896c.png)
生活很好,有你更好,愿有情人总成眷属~~~