Note
Click here to download the full example code
Plot aggregated cellular fates
This example shows how to aggregate fate probabilities from the single cell level to a cluster level and how to visualize these in various ways.
import scanpy as sc
import cellrank as cr
adata = cr.datasets.pancreas_preprocessed("../example.h5ad")
adata
Out:
AnnData object with n_obs × n_vars = 2531 × 2000
obs: 'day', 'proliferation', 'G2M_score', 'S_score', 'phase', 'clusters_coarse', 'clusters', 'clusters_fine', 'louvain_Alpha', 'louvain_Beta', 'initial_size_unspliced', 'initial_size_spliced', 'initial_size', 'n_counts', 'velocity_self_transition', 'dpt_pseudotime'
var: 'highly_variable_genes', 'gene_count_corr', 'means', 'dispersions', 'dispersions_norm', 'fit_r2', 'fit_alpha', 'fit_beta', 'fit_gamma', 'fit_t_', 'fit_scaling', 'fit_std_u', 'fit_std_s', 'fit_likelihood', 'fit_u0', 'fit_s0', 'fit_pval_steady', 'fit_steady_u', 'fit_steady_s', 'fit_variance', 'fit_alignment_scaling', 'velocity_genes'
uns: 'clusters_colors', 'clusters_fine_colors', 'diffmap_evals', 'iroot', 'louvain_Alpha_colors', 'louvain_Beta_colors', 'neighbors', 'pca', 'recover_dynamics', 'velocity_graph', 'velocity_graph_neg', 'velocity_params'
obsm: 'X_diffmap', 'X_pca', 'X_umap', 'velocity_umap'
varm: 'PCs', 'loss'
layers: 'Ms', 'Mu', 'fit_t', 'fit_tau', 'fit_tau_', 'spliced', 'unspliced', 'velocity', 'velocity_u'
obsp: 'connectivities', 'distances'
First, we compute the terminal states and the lineages, as well as scanpy
’s PAGA [Wolf et al., 2019].
cr.tl.terminal_states(
adata,
cluster_key="clusters",
weight_connectivities=0.2,
n_states=3,
softmax_scale=4,
show_progress_bar=False,
)
cr.tl.lineages(adata)
sc.tl.paga(adata, "clusters")
Out:
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/checkouts/latest/examples/plotting/plot_cluster_fates.py:17: DeprecationWarning: `cellrank.tl.terminal_states` will be removed in version `2.0`. Please use the `cellrank.kernels` or `cellrank.estimators` interface instead.
cr.tl.terminal_states(
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/checkouts/latest/cellrank/tl/_init_term_states.py:158: DeprecationWarning: `cellrank.tl.transition_matrix` will be removed in version `2.0`. Please use the `cellrank.kernels` or `cellrank.estimators` interface instead.
kernel = transition_matrix(
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/checkouts/latest/examples/plotting/plot_cluster_fates.py:25: DeprecationWarning: `cellrank.tl.lineages` will be removed in version `2.0`. Please use the `cellrank.kernels` or `cellrank.estimators` interface instead.
cr.tl.lineages(adata)
0%| | 0/3 [00:00<?, ?/s]
100%|##########| 3/3 [00:00<00:00, 34.89/s]
We can visualize the aggregate absorption probabilities as a bar plot. The whiskers correspond to the standard error of the mean.
cr.pl.cluster_fates(adata, mode="bar")

Similarly, the aggregate information can be visualized using a heatmap or a clustermap.
cr.pl.cluster_fates(adata, mode="heatmap")
cr.pl.cluster_fates(adata, mode="clustermap")
Violin plots are helpful to visualize the distribution of fate probabilities per cluster.
It is also possible to restrict this plot only to a subset of clusters using the clusters
parameter.
cr.pl.cluster_fates(adata, mode="violin", cluster_key="clusters")

Out:
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/seaborn/rcmod.py:82: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
if LooseVersion(mpl.__version__) >= "3.0":
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/setuptools/_distutils/version.py:351: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
other = LooseVersion(other)
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/seaborn/cm.py:1582: UserWarning: Trying to register the cmap 'rocket' which already exists.
mpl_cm.register_cmap(_name, _cmap)
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/seaborn/cm.py:1583: UserWarning: Trying to register the cmap 'rocket_r' which already exists.
mpl_cm.register_cmap(_name + "_r", _cmap_r)
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/seaborn/cm.py:1582: UserWarning: Trying to register the cmap 'mako' which already exists.
mpl_cm.register_cmap(_name, _cmap)
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/seaborn/cm.py:1583: UserWarning: Trying to register the cmap 'mako_r' which already exists.
mpl_cm.register_cmap(_name + "_r", _cmap_r)
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/seaborn/cm.py:1582: UserWarning: Trying to register the cmap 'icefire' which already exists.
mpl_cm.register_cmap(_name, _cmap)
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/seaborn/cm.py:1583: UserWarning: Trying to register the cmap 'icefire_r' which already exists.
mpl_cm.register_cmap(_name + "_r", _cmap_r)
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/seaborn/cm.py:1582: UserWarning: Trying to register the cmap 'vlag' which already exists.
mpl_cm.register_cmap(_name, _cmap)
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/seaborn/cm.py:1583: UserWarning: Trying to register the cmap 'vlag_r' which already exists.
mpl_cm.register_cmap(_name + "_r", _cmap_r)
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/seaborn/cm.py:1582: UserWarning: Trying to register the cmap 'flare' which already exists.
mpl_cm.register_cmap(_name, _cmap)
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/seaborn/cm.py:1583: UserWarning: Trying to register the cmap 'flare_r' which already exists.
mpl_cm.register_cmap(_name + "_r", _cmap_r)
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/seaborn/cm.py:1582: UserWarning: Trying to register the cmap 'crest' which already exists.
mpl_cm.register_cmap(_name, _cmap)
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/seaborn/cm.py:1583: UserWarning: Trying to register the cmap 'crest_r' which already exists.
mpl_cm.register_cmap(_name + "_r", _cmap_r)
We can also plot the PAGA graph, using an UMAP embedding while visualizing the aggregate absorption probabilities as pie charts.
However, using scvelo.tl.paga()
and cellrank
’s initial and terminal state probabilities, we can also
visualize a directed version of PAGA, see Plot directed PAGA.
cr.pl.cluster_fates(adata, mode="paga_pie", basis="umap", cluster_key="clusters")

Out:
WARNING: transitions_confidence not found, using connectivites instead.
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/networkx/convert.py:157: DeprecationWarning:
The scipy.sparse array containers will be used instead of matrices
in Networkx 3.0. Use `from_scipy_sparse_array` instead.
return nx.from_scipy_sparse_matrix(data, create_using=create_using)
Lastly, we can visualize the absorption probabilities in PAGA graph by coloring the nodes.
cr.pl.cluster_fates(adata, mode="paga", legend_loc="on data", basis="umap")

Out:
WARNING: transitions_confidence not found, using connectivites instead.
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/networkx/convert.py:157: DeprecationWarning:
The scipy.sparse array containers will be used instead of matrices
in Networkx 3.0. Use `from_scipy_sparse_array` instead.
return nx.from_scipy_sparse_matrix(data, create_using=create_using)
WARNING: transitions_confidence not found, using connectivites instead.
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/networkx/convert.py:157: DeprecationWarning:
The scipy.sparse array containers will be used instead of matrices
in Networkx 3.0. Use `from_scipy_sparse_array` instead.
return nx.from_scipy_sparse_matrix(data, create_using=create_using)
WARNING: transitions_confidence not found, using connectivites instead.
/home/docs/checkouts/readthedocs.org/user_builds/cellrank/envs/latest/lib/python3.9/site-packages/networkx/convert.py:157: DeprecationWarning:
The scipy.sparse array containers will be used instead of matrices
in Networkx 3.0. Use `from_scipy_sparse_array` instead.
return nx.from_scipy_sparse_matrix(data, create_using=create_using)
Total running time of the script: ( 0 minutes 22.237 seconds)
Estimated memory usage: 755 MB