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 cellrank as cr
import scanpy as sc

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 [Wolf19].

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:

INFO: Using pre-computed schur decomposition

We can visualize the aggregate absorption probabilities as a bar plot.

cr.pl.cluster_fates(adata, mode="bar")
Ngn3 low EP, Ngn3 high EP, Fev+, Beta, Alpha, Delta, Epsilon

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")
  • average fate per cluster
  • average fate per cluster

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")
to Epsilon, to Alpha, to Beta

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")
clusters

Out:

WARNING: transitions_confidence not found, using connectivites instead.

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")
to Epsilon, to Alpha, to Beta

Out:

WARNING: transitions_confidence not found, using connectivites instead.
WARNING: transitions_confidence not found, using connectivites instead.
WARNING: transitions_confidence not found, using connectivites instead.

Total running time of the script: ( 0 minutes 47.656 seconds)

Estimated memory usage: 627 MB

Gallery generated by Sphinx-Gallery