Mouse Brain Clustering Analysis
3:MouseBrain_Clustering¶
HiSTaR can process 10X Visium data to extract low-dimension representation. In this tutorial, we use Mouse Brain dataset to introduce the analysis.
The raw Mouse Brain dataset can be downloaded from: https://www.10xgenomics.com/resources/datasets/adult-mouse-brain-section-1-coronal-stains-dapi-anti-neu-n-1-standard-1-1-0
The complete experimental dataset is available here https://zenodo.org/records/15599070
Preparation¶
In [1]:
import scanpy as sc
import matplotlib.pyplot as plt
import torch
import warnings
warnings.filterwarnings("ignore")
In [2]:
import HiSTaR
HiSTaR.fix_seed(2023)
In [3]:
import matplotlib as mpl
mpl.rcParams.update({
'font.family': 'Arial',
'axes.labelweight': 'bold',
'axes.titleweight': 'bold',
'axes.titlesize': 12,
'axes.titlelocation': 'left',
'figure.constrained_layout.use': True,
'figure.dpi': 300,
'savefig.dpi': 300,
})
mclust_palette = [
"#F3766E", "#5BB300", "#2E96FF", "#C655D9", "#FFB549",
"#00C6EA", "#9B8500", "#009E73", "#FF6EB4", "#7AFF33",
"#A837D8", "#FFD700", "#00FF99", "#FF7F50", "#8A2BE2",
"#4B0082", "#FF1493", "#32CD32", "#8B4513"
]
In [4]:
adata = sc.read_visium(path='../data/Adult_Mouse_Brain/Section1', count_file='V1_Adult_Mouse_Brain_Coronal_Section_1_filtered_feature_bc_matrix.h5')
adata.var_names_make_unique()
In [5]:
adata
Out[5]:
AnnData object with n_obs × n_vars = 2903 × 32285
obs: 'in_tissue', 'array_row', 'array_col'
var: 'gene_ids', 'feature_types', 'genome'
uns: 'spatial'
obsm: 'spatial'
In [6]:
from sklearn.decomposition import PCA
#Normalization
sc.pp.highly_variable_genes(adata, flavor="seurat_v3", n_top_genes=2000)
adata = adata[:, adata.var['highly_variable']]
sc.pp.scale(adata)
adata_X = PCA(n_components=200, random_state=42).fit_transform(adata.X)
adata.obsm['X_pca'] = adata_X
Constructing the spatial network¶
In [7]:
# construct graph
graph_dict = HiSTaR.graph_construction(adata, 12)
Running HiSTaR¶
In [8]:
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
histar_net = HiSTaR.histar(adata.obsm['X_pca'], graph_dict, device=device, gcn_hidden2=12, lambda_sim=0.15)
histar_net.train()
histar_feat, _, _, _ = histar_net.process()
adata.obsm['HiSTaR'] = histar_feat
Clusting¶
In [9]:
#HiSTaR.configure_r_environment() # If you encounter problems loading R packages, you can manually configure your path in this function.
In [10]:
HiSTaR.mclust_R(adata, n_clusters=15, use_rep='HiSTaR', key_added='HiSTaR')
R[write to console]: __ __
____ ___ _____/ /_ _______/ /_
/ __ `__ \/ ___/ / / / / ___/ __/
/ / / / / / /__/ / /_/ (__ ) /_
/_/ /_/ /_/\___/_/\__,_/____/\__/ version 6.1.1
Type 'citation("mclust")' for citing this R package in publications.
fitting ... |======================================================================| 100%
Out[10]:
AnnData object with n_obs × n_vars = 2903 × 2000
obs: 'in_tissue', 'array_row', 'array_col', 'HiSTaR'
var: 'gene_ids', 'feature_types', 'genome', 'highly_variable', 'highly_variable_rank', 'means', 'variances', 'variances_norm', 'mean', 'std'
uns: 'spatial', 'hvg'
obsm: 'spatial', 'X_pca', 'HiSTaR'
Visualization¶
In [11]:
plt.rcParams.update({
"figure.figsize": (4, 4),
"figure.facecolor": "white",
"axes.facecolor": "white"
})
# 生成无背景的嵌入图
sc.pl.spatial(
adata,
basis="spatial",
img_key=None,
color="HiSTaR",
size=1.5,
palette=mclust_palette,
title="HiSTaR Clustering (Spatial)",
frameon=True,
legend_loc=None,
show=False,
)
ax = plt.gca()
ax.set_facecolor("white")
plt.tight_layout()
In [12]:
sc.pp.neighbors(adata, use_rep='HiSTaR')
sc.tl.umap(adata)
plt.rcParams["figure.figsize"] = (4, 3)
sc.pl.umap(
adata,
color='HiSTaR',
title='HiSTaR',
show=False,
s=16,
palette=mclust_palette,
frameon=False
)
Out[12]:
<Axes: title={'left': 'HiSTaR'}, xlabel='UMAP1', ylabel='UMAP2'>