Cell-cell communication is fundamental to multicellular organism function, coordinating processes from development to immune response. OmnipathR provides comprehensive access to ligand-receptor interactions and intercellular communication annotations, enabling systematic analysis of cellular crosstalk.
Intercellular signaling involves:
┌─────────────────┐ ┌─────────────────┐
│ Sender Cell │ │ Receiver Cell │
│ │ │ │
│ ┌───────────┐ │ Ligand │ ┌───────────┐ │
│ │ Ligand │──┼───────────────────►│ │ Receptor │ │
│ │ Gene │ │ │ │ │ │
│ └───────────┘ │ │ └─────┬─────┘ │
│ │ │ │ │
│ │ │ ▼ │
│ │ │ ┌───────────┐ │
│ │ │ │ Signaling │ │
│ │ │ │ Cascade │ │
│ │ │ └───────────┘ │
└─────────────────┘ └─────────────────┘
OmnipathR organizes intercellular communication roles into a hierarchical system:
# Get all intercell categories
categories <- intercell_categories()
# View category summary
cat("Total categories:", length(categories), "\n")
#> Total categories: 833
# Show main categories
cat("\nSample categories:\n")
#>
#> Sample categories:
head(categories, 20)
#> [1] "5ht_gprotein" "5ht_ionotropic" "7d_cadherin"
#> [4] "7tm_a" "7tm_a_ogr1_gpr4_7tm_a" "7tm_a_orphan_7tm_a"
#> [7] "7tm_b" "7tm_c" "7tm_d"
#> [10] "7tm_d_olfactory_7tm_d" "7tm_type_b_polypeptide_7tm_b" "abc"
#> [13] "abca" "abcb" "abcc"
#> [16] "abcg" "acid_sensing" "act_tgfb"
#> [19] "actin_regulation_adhesome" "activating_cofactor"| Category | Description | Examples |
|---|---|---|
| Ligand | Secreted signaling molecules | Cytokines, growth factors |
| Receptor | Signal-receiving proteins | RTKs, GPCRs |
| ECM | Extracellular matrix components | Collagens, laminins |
| Adhesion | Cell adhesion molecules | Integrins, cadherins |
| Transporter | Membrane transporters | Ion channels, ABC transporters |
# Get intercell annotations
intercell_data <- intercell()
cat("Total intercell records:", nrow(intercell_data), "\n")
#> Total intercell records: 388239
# Summary of categories
category_counts <- intercell_data %>%
count(category, sort = TRUE)
head(category_counts, 15)
#> # A tibble: 15 × 2
#> category n
#> <chr> <int>
#> 1 intracellular 162594
#> 2 transmembrane 51903
#> 3 receptor 35316
#> 4 plasma_membrane 15891
#> 5 secreted 15858
#> 6 ligand 15698
#> 7 ecm 10459
#> 8 cell_surface 10438
#> 9 extracellular 9443
#> 10 plasma_membrane_transmembrane 7902
#> 11 cell_adhesion 4845
#> 12 gpcr 4370
#> 13 adhesion 2964
#> 14 cell_surface_ligand 2664
#> 15 ion_channel 2160# Visualize top categories
top_categories <- category_counts %>% head(12)
ggplot(top_categories, aes(x = reorder(category, n), y = n, fill = category)) +
geom_col(alpha = 0.8) +
coord_flip() +
scale_fill_viridis_d(guide = "none") +
labs(
title = "Intercellular Communication Categories",
subtitle = "Number of annotated proteins per category",
x = "Category",
y = "Number of Proteins"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 14),
axis.text.y = element_text(size = 9)
)Distribution of proteins across major intercellular communication categories.
# Get curated ligand-receptor interactions
lr_interactions <- tryCatch(
curated_ligand_receptor_interactions(),
error = function(e) {
message("Note: Unable to fetch data from OmniPath server: ", e$message)
# Return sample data structure for demonstration
data.frame(
source_genesymbol = c("TGFB1", "WNT3A", "FGF2", "EGF", "VEGFA"),
target_genesymbol = c("TGFBR1", "FZD1", "FGFR1", "EGFR", "KDR"),
sources = rep("CellPhoneDB", 5)
)
}
)
cat("Total L-R pairs:", nrow(lr_interactions), "\n")
#> Total L-R pairs: 6744
# View example interactions
lr_interactions %>%
select(source_genesymbol, target_genesymbol, sources) %>%
head(10)
#> # A tibble: 10 × 3
#> source_genesymbol target_genesymbol sources
#> <chr> <chr> <chr>
#> 1 JAG2 NOTCH1 iTALK;Kirouac2010;KEGG-MEDICUS;ICELLNET;SIGNOR;CellPhoneDB_Cellinker;S…
#> 2 IL22 IL10RB iTALK;SIGNOR;HINT;SignaLink3;UniProt_LRdb;Lit-BM-17;HPRD_LRdb;talklr;s…
#> 3 EPO EPOR iTALK;Kirouac2010;KEGG-MEDICUS;Guide2Pharma_LRdb;ICELLNET;SIGNOR;HINT;…
#> 4 CXCL16 CXCR6 iTALK;Kirouac2010;Guide2Pharma_LRdb;ICELLNET;HINT;HPMR_talklr;HPMR;Cel…
#> 5 KITLG KIT iTALK;Kirouac2010;KEGG-MEDICUS;Guide2Pharma_LRdb;ICELLNET;ProtMapper;S…
#> 6 CXCL9 CXCR3 iTALK;Kirouac2010;Guide2Pharma_LRdb;ICELLNET;SIGNOR;HINT;CellPhoneDB_C…
#> 7 CCL5 CCR5 iTALK;KEGG-MEDICUS;Guide2Pharma_LRdb;ICELLNET;ProtMapper;SIGNOR;HINT;C…
#> 8 CCL8 CCR5 iTALK;Guide2Pharma_LRdb;ICELLNET;HINT;CellPhoneDB_Cellinker;InnateDB;D…
#> 9 CCL4 CCR5 iTALK;Kirouac2010;Guide2Pharma_LRdb;ICELLNET;SIGNOR;HINT;InnateDB;DIP;…
#> 10 IL6 IL6ST iTALK;SIGNOR;HINT;InnateDB;DIP;UniProt_LRdb;Lit-BM-17;HPMR_talklr;HPMR…# Count interactions per ligand
ligand_counts <- lr_interactions %>%
count(source_genesymbol, name = "n_receptors", sort = TRUE) %>%
head(15) %>%
mutate(type = "Ligand")
# Count interactions per receptor
receptor_counts <- lr_interactions %>%
count(target_genesymbol, name = "n_ligands", sort = TRUE) %>%
head(15) %>%
mutate(type = "Receptor")
# Combine for visualization
combined_counts <- bind_rows(
ligand_counts %>% rename(gene = source_genesymbol, count = n_receptors),
receptor_counts %>% rename(gene = target_genesymbol, count = n_ligands)
)
ggplot(combined_counts, aes(x = reorder(gene, count), y = count, fill = type)) +
geom_col(alpha = 0.8) +
coord_flip() +
facet_wrap(~type, scales = "free_y") +
scale_fill_manual(values = c("Ligand" = "#E74C3C", "Receptor" = "#3498DB")) +
labs(
title = "Top Ligands and Receptors",
subtitle = "Ranked by number of interaction partners",
x = "Gene",
y = "Number of Partners"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold"),
legend.position = "none",
strip.text = element_text(face = "bold")
)Top ligands and receptors by number of interaction partners in the curated database.
# Get all ligands
ligands <- intercell_data %>%
filter(category == "ligand" | grepl("ligand", category)) %>%
pull(genesymbol) %>%
unique()
cat("Total ligands:", length(ligands), "\n")
#> Total ligands: 2932
# Show sample ligands
head(ligands, 20)
#> [1] "FST" "RSPO3" "RSPO4" "PORCN"
#> [5] "GPC4" "COMPLEX:THBS1" "THBS1" "RSPO2"
#> [9] "RSPO1" "SFRP5" "DCN" "SOST"
#> [13] "LEFTY1" "COMPLEX:SERPINF1" "COMPLEX:NOTUM" "IGFBP2"
#> [17] "COMPLEX:LEFTY1_LEFTY2" "SPARC" "NOTUM" "COMPLEX:FST_INHBA"# Get receptor annotations
receptors <- intercell_data %>%
filter(grepl("receptor", category, ignore.case = TRUE))
# Classify receptors by category
receptor_types <- receptors %>%
count(category, sort = TRUE) %>%
head(10)
ggplot(receptor_types, aes(x = reorder(category, n), y = n, fill = category)) +
geom_col(alpha = 0.8) +
coord_flip() +
scale_fill_viridis_d(guide = "none") +
labs(
title = "Receptor Classification",
subtitle = "Distribution across receptor subcategories",
x = "Receptor Category",
y = "Number of Proteins"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold"),
axis.text.y = element_text(size = 9)
)Classification of receptors by subcategory showing the diversity of receptor types in the database.
# Analyze resources contributing to L-R interactions
if("sources" %in% colnames(lr_interactions)) {
resource_counts <- lr_interactions %>%
separate_rows(sources, sep = ";") %>%
count(sources, sort = TRUE) %>%
head(12)
ggplot(resource_counts, aes(x = reorder(sources, n), y = n)) +
geom_col(fill = "#007B7F", alpha = 0.8) +
coord_flip() +
labs(
title = "Ligand-Receptor Resources",
subtitle = "Number of interactions per resource",
x = "Resource",
y = "Interactions"
) +
theme_minimal() +
theme(plot.title = element_text(face = "bold"))
}Comparison of ligand-receptor interaction coverage across different resources integrated in OmniPath.
sessionInfo()
#> R version 4.6.0 (2026-04-24)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.4 LTS
#>
#> Matrix products: default
#> BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
#> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so; LAPACK version 3.12.0
#>
#> locale:
#> [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8
#> [4] LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
#> [7] LC_PAPER=en_US.UTF-8 LC_NAME=C LC_ADDRESS=C
#> [10] LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
#>
#> time zone: Etc/UTC
#> tzcode source: system (glibc)
#>
#> attached base packages:
#> [1] stats graphics grDevices utils datasets methods base
#>
#> other attached packages:
#> [1] tidyr_1.3.2 tibble_3.3.1 bookdown_0.46 magrittr_2.0.5 ggraph_2.2.2 igraph_2.3.1
#> [7] ggplot2_4.0.3 dplyr_1.2.1 Matrix_1.7-5 OmnipathR_3.19.1 BiocStyle_2.41.0
#>
#> loaded via a namespace (and not attached):
#> [1] tidyselect_1.2.1 viridisLite_0.4.3 farver_2.1.2 blob_1.3.0 viridis_0.6.5
#> [6] R.utils_2.13.0 S7_0.2.2 fastmap_1.2.0 tweenr_2.0.3 XML_3.99-0.23
#> [11] digest_0.6.39 timechange_0.4.0 lifecycle_1.0.5 RSQLite_3.52.0 compiler_4.6.0
#> [16] rlang_1.2.0 sass_0.4.10 progress_1.2.3 tools_4.6.0 utf8_1.2.6
#> [21] yaml_2.3.12 knitr_1.51 labeling_0.4.3 graphlayouts_1.2.3 prettyunits_1.2.0
#> [26] bit_4.6.0 curl_7.1.0 xml2_1.5.2 RColorBrewer_1.1-3 R.matlab_3.7.0
#> [31] withr_3.0.2 purrr_1.2.2 sys_3.4.3 R.oo_1.27.1 polyclip_1.10-7
#> [36] grid_4.6.0 scales_1.4.0 MASS_7.3-65 cli_3.6.6 rmarkdown_2.31
#> [41] crayon_1.5.3 generics_0.1.4 otel_0.2.0 httr_1.4.8 tzdb_0.5.0
#> [46] sessioninfo_1.2.3 readxl_1.5.0 DBI_1.3.0 cachem_1.1.0 ggforce_0.5.0
#> [51] stringr_1.6.0 rvest_1.0.5 parallel_4.6.0 BiocManager_1.30.27 selectr_0.5-1
#> [56] cellranger_1.1.0 vctrs_0.7.3 jsonlite_2.0.0 hms_1.1.4 ggrepel_0.9.8
#> [61] bit64_4.8.2 maketools_1.3.2 jquerylib_0.1.4 glue_1.8.1 lubridate_1.9.5
#> [66] stringi_1.8.7 gtable_0.3.6 later_1.4.8 logger_0.4.2 pillar_1.11.1
#> [71] rappdirs_0.3.4 htmltools_0.5.9 R6_2.6.1 httr2_1.2.2 tcltk_4.6.0
#> [76] tidygraph_1.3.1 vroom_1.7.1 evaluate_1.0.5 lattice_0.22-9 readr_2.2.0
#> [81] R.methodsS3_1.8.2 backports_1.5.1 memoise_2.0.1 bslib_0.11.0 Rcpp_1.1.1-1.1
#> [86] zip_2.3.3 gridExtra_2.3 checkmate_2.3.4 xfun_0.57 fs_2.1.0
#> [91] buildtools_1.0.0 pkgconfig_2.0.3Türei D, et al. Integrated intra- and intercellular signaling knowledge for multicellular omics analysis. Molecular Systems Biology 2021;17:e9923.
Efremova M, et al. CellPhoneDB: inferring cell–cell communication from combined expression of multi-subunit ligand–receptor complexes. Nature Protocols 2020;15:1484-1506.
Ramilowski JA, et al. A draft network of ligand–receptor-mediated multicellular signalling in human. Nature Communications 2015;6:7866.