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

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.
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.
WARNING: transitions_confidence not found, using connectivites instead.
WARNING: transitions_confidence not found, using connectivites instead.
Total running time of the script: ( 0 minutes 46.394 seconds)
Estimated memory usage: 620 MB