Spatial Metabolite Analysis¶
[2]:
%load_ext autoreload
%autoreload
import scanpy as sc
import spmetatme.plotting as pl
from spmetatme.utils import get_metabolite_adata
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
warnings.filterwarnings("ignore")
c:\Users\suraj\anaconda3\envs\spatialEnv\Lib\site-packages\tqdm\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
from .autonotebook import tqdm as notebook_tqdm
Load Spatial metabolic fluxes¶
Structure of the loaded AnnData object:
``.X``: Reaction fluxes matrix (rows = spatial spots, columns = reactions)
``.obs``: Metadata for each spot (metabolic domains)
``.var``: Metadata for each reaction (‘rxn_id’, ‘rxn_names’, ‘rxn_full_names’, ‘ex_rxns’, ‘subsystems’)
``.obsm[‘metabolites’]``: The key data! A matrix of net metabolite balance (rows = spots, columns = metabolites)
``.uns``: Unstructured metadata including ‘TME_metabolites’, ‘met_names’, ‘moranI’, ‘neighbors’, ‘spatial’
[3]:
adata = sc.read_h5ad(r"output/metabolic_Breast_cancer_Block_A.h5ad")
adata
[3]:
AnnData object with n_obs × n_vars = 3798 × 6561
obs: 'domain'
var: 'rxn_id', 'rxn_names', 'rxn_full_names', 'ex_rxns', 'subsystems'
uns: 'TME_metabolites', 'met_names', 'moranI', 'neighbors', 'spatial'
obsm: 'ex_rxns', 'metabolites', 'spatial'
obsp: 'communication', 'connectivities', 'distances'
From spatial metabolic adata inferred by spMetaTME, get metabolite level adata object¶
n_obs: Number of spatial spots (same as before)
n_vars: Number of metabolites
``.X``: net metabolite balance (spots × metabolites)
``.obs``: spot metadata (domain)
``.var``: metabolite information:
metabolite_names: Common name (e.g., “glucose”, “L-lactate”)Compartment: Where metabolite is located (code: c, e, m, p)Compartment_name: Full compartment name (e.g., “Cytoplasm”, “Extracellular”)moran_score: Spatial autocorrelation metric (high = spatially clustered, low = randomly distributed)
[4]:
metabolite_adata = get_metabolite_adata(adata)
metabolite_adata
[4]:
AnnData object with n_obs × n_vars = 3798 × 2919
obs: 'domain'
var: 'Compartment', 'Compartment_name', 'metabolite_names'
uns: 'TME_metabolites', 'met_names', 'moranI', 'neighbors', 'spatial'
obsm: 'ex_rxns', 'metabolites', 'spatial'
obsp: 'distances', 'connectivities'
Spatial Maps of Metabolites¶
Parameters:
metabolite_names: List of metabolite names in human-readable formatmetabolites: List of metabolite model IDs (alternative way to specify metabolites)img_key: Which image to use as background (default: “hires” for high-resolution image)size: Size of spots in the plot (adjust for visibility)figsize_per_row: Dimensions of figure per metabolite rowfile_name(optional): filename to save the plot
[5]:
pl.plot_spatial_metabolites(metabolite_adata, metabolite_names=['glucose','pyruvate','L-lactate'])
Plot spatial metabolite distribution by metabolite id¶
[6]:
pl.plot_spatial_metabolites(metabolite_adata, metabolites=['MAM02403c','MAM02403e'])
Metabolite distribution across compartments and domains¶
[7]:
pl.metabolite_ridges_plot(metabolite_adata, n_cols=3)
Identify differentially enriched metabolites¶
[8]:
df = pl.plot_differential_metabolite_heatmap(metabolite_adata, top_n=5, return_marker_df=True)
df
[8]:
| group | names | scores | logfoldchanges | pvals | pvals_adj | |
|---|---|---|---|---|---|---|
| 0 | 0 | ornithine [c] | 43.213764 | 0.265625 | 0.000000e+00 | 0.000000e+00 |
| 1 | 0 | palmitolate [c] | 43.115639 | 0.349242 | 0.000000e+00 | 0.000000e+00 |
| 133 | 0 | NADP+ [m] | 30.568985 | 0.787096 | 3.163521e-205 | 2.798278e-204 |
| 302 | 0 | sphinganine [c] | 23.213366 | -0.841104 | 3.337094e-119 | 1.245649e-118 |
| 385 | 0 | tyrosine [e] | 20.521523 | -1.777718 | 1.383148e-93 | 4.103057e-93 |
| ... | ... | ... | ... | ... | ... | ... |
| 14445 | 4 | NADP+ [m] | -33.108196 | -0.761299 | 2.265194e-240 | 2.755042e-239 |
| 14488 | 4 | palmitate [r] | -33.682312 | -0.325301 | 1.049550e-248 | 1.730868e-247 |
| 14591 | 4 | sphinganine [c] | -42.286964 | 1.775674 | 0.000000e+00 | 0.000000e+00 |
| 14592 | 4 | 1-phosphatidyl-1D-myo-inositol-4-phosphate [c] | -42.633022 | 2.909879 | 0.000000e+00 | 0.000000e+00 |
| 14593 | 4 | cys-gly [e] | -42.761959 | -1.398427 | 0.000000e+00 | 0.000000e+00 |
115 rows × 6 columns