omicverse-single-cell-liana-communication
OmicVerse Single-Cell — LIANA+ Cell-Cell Communication
Goal
Take a preprocessed annotated single-cell AnnData and run LIANA+ ligand-receptor inference, producing per-(sender, receiver, ligand, receptor) score columns in adata.uns['liana_res']. Then post-process via ov.single.to_comm_adata(...) into a communication AnnData keyed on the sender→receiver direction, classified against the CellChat / CellChatDB pathway taxonomy. Visualise with ov.pl.ccc_heatmap(...) — eight plot_type modes covering dot / tile / aggregation heatmap / pathway-bubble / role-heatmap / role-network / focused-heatmap.
This skill is the LIANA-side complement to the existing single-cell-cellphonedb-communication skill. They produce comparable hit sets but LIANA aggregates across multiple base methods (CellPhoneDB, NATMI, Connectome, SingleCellSignalR, CellChat) into a rank_aggregate consensus — typically more robust than any single method.
Quick Workflow
- Load a preprocessed annotated
AnnData(obs[group_key]populated; for the PBMC8k demo,bulk_labels). - Optional: visualise the cohort embedding to confirm cluster labels look right (
ov.pl.embedding(adata, basis='X_umap', color='bulk_labels', frameon='small')). - Run LIANA:
ov.single.run_liana(adata, groupby='bulk_labels', method='rank_aggregate', resource_name='consensus', key_added='liana_res', inplace=True). Result lands atadata.uns['liana_res']. - Pathway-aware reshape:
comm_adata = ov.single.to_comm_adata(adata, result_uns_key='liana_res', score_key='specificity_rank', pvalue_key='specificity_rank', classification_reference='cellchat', classification_fallback='family'). Returns a CommAnnData with one var per (ligand, receptor) and avar['classification']column mapping each pair to a CellChat pathway. - Pathway dot plots:
ov.pl.ccc_heatmap(adata, plot_type='dot', display_by='interaction', score_key='specificity_rank', ...). Multipleplot_typemodes share a uniform interface — see Branch Selection below. - Aggregation heatmap:
plot_type='heatmap', display_by='aggregation'shows sender→receiver totals. - Sender / receiver focus: pass
sender_use=<cluster>orreceiver_use=<cluster>to filter to a single direction. - Pathway-focused / role-network views:
plot_type='focused_heatmap','pathway_bubble','role_heatmap','role_network'— pick by question (see Branch Selection). - Multi-condition comparison: stack LIANA results from multiple conditions, set
conditioncolumn on the result frames, and re-run plotters with the multi-condition adata.