Exploration of hormonal receptor genes in Castaldi et al organoid dataset - Metacell calculation by SeaCells¶

1. Environment¶

1.1 Modules¶

In [1]:
import os
import sys

import numpy as np
import pandas as pd
import scanpy as sc

import pickle

#Plotting
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns

#utils
import ipynbname
from datetime import datetime

# SeaCell
import SEACells

#import custom functions
sys.path.append('../')
import functions as fn
findfont: Font family ['Raleway'] not found. Falling back to DejaVu Sans.
findfont: Font family ['Lato'] not found. Falling back to DejaVu Sans.
In [2]:
# Some plotting aesthetics
%matplotlib inline

sns.set_style('ticks')
matplotlib.rcParams['figure.figsize'] = [3.5, 3.5]
matplotlib.rcParams['figure.dpi'] = 100
In [3]:
print("Scanpy version: ", sc.__version__)
print("Pandas version: ", pd.__version__)
print("SEACell version: ", SEACells.__version__)
Scanpy version:  1.9.3
Pandas version:  2.0.0
SEACell version:  0.3.3

1.2 Settings¶

In [4]:
sc.settings.verbosity = 3
sc.settings.set_figure_params(dpi=80)

1.3 Files and parameters¶

In [5]:
input_file = '../../../../DataDir/ExternalData/SingleCellData/Castaldi_metacells_new.h5ad'

1.4 Start computations¶

In [6]:
print(datetime.now())
2026-04-27 15:06:43.372723

2. Data Load¶

2.1 Read adata metacells file¶

In [7]:
adata = sc.read(input_file)
adata
Out[7]:
AnnData object with n_obs × n_vars = 249 × 33538
    obs: 'leidenAnnotated', 'leidenAnnotated_purity'
    var: 'highly_variable', 'means', 'dispersions', 'dispersions_norm'
    uns: 'hvg', 'leidenAnnotated_colors', 'log1p', 'neighbors', 'pca', 'umap'
    obsm: 'X_pca', 'X_umap'
    varm: 'PCs'
    layers: 'counts', 'lognorm', 'raw'
    obsp: 'connectivities', 'distances'
In [8]:
sc.pl.umap(adata, color=['leidenAnnotated'], s=150)
/usr/local/lib/python3.8/dist-packages/scanpy/plotting/_tools/scatterplots.py:392: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap' will be ignored
  cax = scatter(

3. Exploration of hormonal receptor gene signature expression¶

In [9]:
signatures = '../../../../DataDir/ExternalData/Receptors/EndocrineKeyGenes.txt'
sig = pd.read_csv(signatures, sep="\t", keep_default_na=False)  
genes = sig["GeneName"].values.tolist()
In [10]:
fn.CustomUmap(adata, genes, embedding="X_umap", s=150)
In [11]:
sc.settings.figdir = "../../../../FigPaper/"

sc.set_figure_params(dpi_save=600)

gene_dict = sig.groupby("Signature")["GeneName"].apply(list).to_dict()


gene_dict_filtered = {
    sig_name: [g for g in genes if g in adata.var_names]
    for sig_name, genes in gene_dict.items()
}

gene_dict_filtered = {k: v for k, v in gene_dict_filtered.items() if v}

if gene_dict_filtered:
    sc.pl.dotplot(
        adata,
        gene_dict_filtered,
        groupby='leidenAnnotated',
        save="CastaldiAll_highres.png"
    )
else:
    print("None of the specified genes are found.")
WARNING: saving figure to file ../../../../FigPaper/dotplot_CastaldiAll_highres.png
/usr/local/lib/python3.8/dist-packages/scanpy/plotting/_dotplot.py:749: UserWarning: No data for colormapping provided via 'c'. Parameters 'cmap', 'norm' will be ignored
  dot_ax.scatter(x, y, **kwds)
In [12]:
print(datetime.now())
2026-04-27 15:06:52.718998
In [ ]: