Litviňuková, M., Talavera-López, C., Maatz, H., Reichart, D., Worth, C.L., Lindberg, E.L., Kanda, M., Polanski, K., Heinig, M., Lee, M., et al. (2020). Cells of the adult human heart. Nature 588, 466–472.

  • BioProject Accession: PRJEB39602
  • GEO Accession: ERP123138



Load required packages.

library(tidyverse)
library(magrittr)
library(Matrix)
library(patchwork)
library(extrafont)
library(reticulate)
Sys.time()
## [1] "2021-03-12 01:23:37 CST"


Data preparation


Functions

source(
    file = file.path(
        SCRIPT_DIR,
        "utilities.R"
    )
)
PROJECT_DIR <- "/Users/jialei/Dropbox/Data/Projects/UTSW/HCM/"

Anndata

Load re-mapped UMI count matrix stored in the h5ad file.

ad <- reticulate::import(module = "anndata", convert = TRUE)
## Python version used by reticulate is different to the current python runtime
## current: /Users/jialei/.pyenv/versions/3.8.2/bin/python
## reticulate: /Users/jialei/.pyenv/shims/python
## Switch radian to the target python environment?
## radian: force reticulate to use /Users/jialei/.pyenv/versions/3.8.2/bin/python
print(ad$`__version__`)
## [1] "0.7.5"
adata <- ad$read_h5ad(
    filename = file.path(
        PROJECT_DIR,
        "raw/public/PRJEB39602/matrices/predefined",
        "adata.h5ad"
    ),
    backed = "r"
)

Metadata


Load metadata released along with the publication (extracted from h5ad file hosted at the HCA portal).

embedding_predefined <- read_csv(
    file = file.path(
        PROJECT_DIR,
        "raw/public/PRJEB39602/ad98d3cd-26fb-4ee3-99c9-8a2ab085e737.hca_heart_global_ctl200723_freeze",
        "embedding_global_raw.gz"
    )
) %>%
    dplyr::rename(cell = X1)
## Warning: Missing column names filled in: 'X1' [1]
## 
## ── Column specification ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
## cols(
##   .default = col_character(),
##   n_counts = col_double(),
##   n_genes = col_double(),
##   percent_mito = col_double(),
##   percent_ribo = col_double(),
##   scrublet_score = col_double(),
##   x_umap = col_double(),
##   y_umap = col_double(),
##   x_pca = col_double(),
##   y_pca = col_double()
## )
## ℹ Use `spec()` for the full column specifications.
colnames(embedding_predefined) <- tolower(colnames(embedding_predefined))
embedding_predefined %<>%
    dplyr::left_join(
        adata$obs %>% tibble::rownames_to_column(var = "cell"),
        by = c("cell" = "cell")
    )

embedding_predefined %>% head()


Summary


Orignial publication


Cell types

embedding_predefined %>%
    dplyr::group_by(cell_type) %>%
    dplyr::summarize(
        num_cells = n(),
        median_umi = median(n_counts),
        median_features = median(n_genes)
    ) %>%
    gt::gt() %>%
    # gt::cols_label(n = "num_cells") %>%
    gt::tab_options(table.font.size = "median")
cell_type num_cells median_umi median_features
Adipocytes 3799 3875.0 1707.0
Atrial_Cardiomyocyte 23483 2868.0 1399.0
doublets 623 688.0 484.0
Endothelial 100579 1585.0 909.0
Fibroblast 59341 1195.0 757.0
Lymphoid 17217 1552.0 831.0
Mesothelial 718 1967.0 1082.5
Myeloid 23028 1655.5 896.0
Neuronal 3961 1039.0 716.0
NotAssigned 33998 2186.0 1230.0
Pericytes 77856 1321.0 790.0
Smooth_muscle_cells 16242 1831.0 988.0
Ventricular_Cardiomyocyte 125289 3621.0 1545.0

Re-mapped

Samples not included after re-mapping.

embedding_predefined %>%
    dplyr::filter(
        is.na(num_umis)
    ) %>%
    dplyr::count(sample.x, region, name = "num_cells")


Cell types for these two samples.

embedding_predefined %>%
    dplyr::filter(
        is.na(num_umis)
    ) %>%
    dplyr::count(cell_type, name = "num_cells")


Cell types

embedding_predefined %>%
    tidyr::drop_na() %>%
    dplyr::group_by(cell_type) %>%
    dplyr::summarize(
        num_cells = n(),
        median_umi = median(n_counts),
        median_features = median(n_genes),
        median_umi_remapped = median(num_umis),
        median_features_remapped = median(num_features)
    ) %>%
    gt::gt() %>%
    # gt::cols_label(n = "num_cells") %>%
    gt::tab_options(table.font.size = "median")
cell_type num_cells median_umi median_features median_umi_remapped median_features_remapped
Adipocytes 3703 3824 1686.0 3892 1743
Atrial_Cardiomyocyte 22883 2819 1381.0 2855 1380
doublets 615 684 483.0 717 494
Endothelial 100066 1583 908.0 1700 963
Fibroblast 58631 1187 753.0 1206 763
Lymphoid 16785 1546 823.0 1597 858
Mesothelial 718 1967 1082.5 2023 1082
Myeloid 22705 1633 889.0 1699 924
Neuronal 3785 1007 701.0 1038 721
NotAssigned 33767 2170 1224.0 2234 1259
Pericytes 76843 1309 784.0 1352 814
Smooth_muscle_cells 15793 1795 975.0 1846 1008
Ventricular_Cardiomyocyte 125289 3621 1545.0 3706 1588


Anatomical region

embedding_predefined %>%
    tidyr::drop_na() %>%
    dplyr::group_by(region) %>%
    dplyr::summarize(
        num_cells = n(),
        median_umi = median(n_counts),
        median_features = median(n_genes),
        median_umi_remapped = median(num_umis),
        median_features_remapped = median(num_features)
    ) %>%
    gt::gt() %>%
    # gt::cols_label(n = "num_cells") %>%
    gt::tab_options(table.font.size = "median")
region num_cells median_umi median_features median_umi_remapped median_features_remapped
AX 98251 1894 1007 1973 1047
LA 70321 1793 984 1840 1006
LV 107261 2139 1109 2256 1166
RA 39365 1509 901 1537 911
RV 84519 2173 1126 2308 1186
SP 81866 1948 1022 2015 1058


Chromium Single Cell 3’ Reagent Kit version

embedding_predefined %>%
    tidyr::drop_na() %>%
    dplyr::group_by(version) %>%
    dplyr::summarise(
        num_cells = n(),
        median_umi = median(n_counts),
        median_features = median(n_genes),
        median_umi_remapped = median(num_umis),
        median_features_remapped = median(num_features)
    ) %>%
    gt::gt() %>%
    gt::tab_options(table.font.size = "median")
version num_cells median_umi median_features median_umi_remapped median_features_remapped
V2 238154 1511 837 1536 850
V3 243429 2358 1248 2522 1330


Cell source

embedding_predefined %>%
    tidyr::drop_na() %>%
    dplyr::group_by(cell_source) %>%
    dplyr::summarise(
        num_cells = n(),
        median_umi = median(n_counts),
        median_features = median(n_genes),
        median_umi_remapped = median(num_umis),
        median_features_remapped = median(num_features)
    ) %>%
    gt::gt() %>%
    gt::tab_options(table.font.size = "median")
cell_source num_cells median_umi median_features median_umi_remapped median_features_remapped
Harvard-Nuclei 173610 2184 1211 2266 1264
Sanger-CD45 80597 2009 965 2079 1004
Sanger-Cells 45885 2884 1368 3474 1591
Sanger-Nuclei 181491 1423 837 1442 845


Source

embedding_predefined %>%
    tidyr::drop_na() %>%
    dplyr::group_by(source) %>%
    dplyr::summarise(
        num_cells = n(),
        median_umi = median(n_counts),
        median_features = median(n_genes),
        median_umi_remapped = median(num_umis),
        median_features_remapped = median(num_features)
    ) %>%
    gt::gt() %>%
    gt::tab_options(table.font.size = "median")
source num_cells median_umi median_features median_umi_remapped median_features_remapped
CD45+ 80597 2009 965 2079 1004
Cells 45885 2884 1368 3474 1591
Nuclei 355101 1811 1018 1861 1046


Age group

embedding_predefined %>%
    tidyr::drop_na() %>%
    dplyr::group_by(age_group) %>%
    dplyr::summarise(
        num_cells = n(),
        median_umi = median(n_counts),
        median_features = median(n_genes),
        median_umi_remapped = median(num_umis),
        median_features_remapped = median(num_features)
    ) %>%
    gt::gt() %>%
    gt::tab_options(table.font.size = "median")
age_group num_cells median_umi median_features median_umi_remapped median_features_remapped
40-45 26934 2953 1481 3050 1544
45-50 32336 2100 1177 2192 1232
50-55 108472 2091 1148 2163 1196
55-60 48287 1571 914 1607 936
60-65 128207 2066 1043 2136 1079
65-70 108449 1803 937 1931 983
70-75 28898 1166 708 1162 702


Donor

embedding_predefined %>%
    tidyr::drop_na() %>%
    dplyr::group_by(donor) %>%
    dplyr::summarise(
        num_cell = n(),
        median_umi = median(n_counts),
        median_features = median(n_genes),
        median_umi_remapped = median(num_umis),
        median_features_remapped = median(num_features)
    ) %>%
    gt::gt() %>%
    gt::tab_options(table.font.size = "median")
donor num_cell median_umi median_features median_umi_remapped median_features_remapped
D1 15397 1982.0 883 1997.0 895
D11 48930 2782.0 1263 2909.5 1325
D2 43143 1393.0 829 1414.0 845
D3 27022 1210.0 754 1217.0 757
D4 28898 1166.0 708 1162.0 702
D5 28799 1396.0 751 1416.0 759
D6 79650 1921.0 1003 2098.0 1069
D7 36134 2123.5 1050 2182.5 1074
H2 22216 1780.0 1065 1841.0 1107
H3 32458 2045.0 1176 2118.0 1227
H4 21265 1924.0 1076 1976.0 1112
H5 38401 2385.0 1273 2482.0 1337
H6 26934 2953.0 1481 3050.0 1544
H7 32336 2100.0 1177 2192.0 1232


Type: Donation after Circulatory Death (DCD), Donation after Brain Death (DCD)

embedding_predefined %>%
    tidyr::drop_na() %>%
    dplyr::group_by(type) %>%
    dplyr::summarise(
        num_cell = n(),
        median_umi = median(n_counts),
        median_features = median(n_genes),
        median_umi_remapped = median(num_umis),
        median_features_remapped = median(num_features)
    ) %>%
    gt::gt() %>%
    gt::tab_options(table.font.size = "median")
type num_cell median_umi median_features median_umi_remapped median_features_remapped
DBD 216029 2058 1133 2126 1178
DCD 265554 1853 965 1943 1000


Adult human heart’s celluar landscape

Pre-defined

Cell embedding and annotation are extracted from h5ad file provided on the HCA portal.

EMBEDDING_TITLE_PREFIX <- "UMAP"
embedding_type <- "predefined"

Cell type & region

GEOM_POINT_SIZE <- 0.1
p_embedding_predefined_cell_type <- plot_embedding(
    embedding = embedding_predefined[, c("x_umap", "y_umap")],
    color_values = embedding_predefined$cell_type %>% as.factor(),
    label = paste0(EMBEDDING_TITLE_PREFIX, "; Cell type"),
    label_position = NULL,
    show_color_value_labels = FALSE,
    show_color_legend = TRUE,
    geom_point_size = GEOM_POINT_SIZE,
    sort_values = FALSE,
    rasterise = FALSE,
    legend_size = 2
) +
    theme_customized(legend_key_size = 2, legend_text_size = 5)

p_embedding_predefined_region <- plot_embedding(
    embedding = embedding_predefined[, c("x_umap", "y_umap")],
    color_values = embedding_predefined$region %>% as.factor(),
    label = paste0(EMBEDDING_TITLE_PREFIX, "; Region"),
    label_position = NULL,
    show_color_value_labels = FALSE,
    show_color_legend = TRUE,
    geom_point_size = GEOM_POINT_SIZE,
    sort_values = FALSE,
    rasterise = TRUE,
    legend_size = 2,
    legend_ncol = 2
) +
    scale_color_manual(
        values = scales::hue_pal()(
            embedding_predefined$region %>% unique() %>% length()
        )
    ) +
    theme_customized(legend_key_size = 2, legend_text_size = 5)

p_embedding_predefined_donor <- plot_embedding(
    embedding = embedding_predefined[, c("x_umap", "y_umap")],
    color_values = embedding_predefined$donor %>% as.factor(),
    label = paste0(EMBEDDING_TITLE_PREFIX, "; Donor"),
    label_position = NULL,
    show_color_value_labels = FALSE,
    show_color_legend = TRUE,
    geom_point_size = GEOM_POINT_SIZE,
    sort_values = FALSE,
    rasterise = TRUE,
    legend_size = 2,
    legend_ncol = 2
) +
    scale_color_manual(
        values = scales::hue_pal()(
            embedding_predefined$donor %>% unique() %>% length()
        )
    ) +
    theme_customized(legend_key_size = 2, legend_text_size = 5)

p_embedding_predefined_version <- plot_embedding(
    embedding = embedding_predefined[, c("x_umap", "y_umap")],
    color_values = embedding_predefined$version %>% as.factor(),
    label = paste0(EMBEDDING_TITLE_PREFIX, "; Version"),
    label_position = NULL,
    show_color_value_labels = FALSE,
    show_color_legend = TRUE,
    geom_point_size = GEOM_POINT_SIZE,
    sort_values = FALSE,
    rasterise = TRUE,
    legend_size = 2
) +
    scale_color_manual(
        values = scales::hue_pal()(
            embedding_predefined$version %>% unique() %>% length()
        )
    ) +
    theme_customized(legend_key_size = 2, legend_text_size = 5)

p_embedding_predefined_source <- plot_embedding(
    embedding = embedding_predefined[, c("x_umap", "y_umap")],
    color_values = embedding_predefined$source %>% as.factor(),
    label = paste0(EMBEDDING_TITLE_PREFIX, "; Source"),
    label_position = NULL,
    show_color_value_labels = FALSE,
    show_color_legend = TRUE,
    geom_point_size = GEOM_POINT_SIZE,
    sort_values = FALSE,
    rasterise = TRUE,
    legend_size = 2
) +
    scale_color_manual(
        values = scales::hue_pal()(
            embedding_predefined$source %>% unique() %>% length()
        )
    ) +
    theme_customized(legend_key_size = 2, legend_text_size = 5)

p_embedding_predefined_type <- plot_embedding(
    embedding = embedding_predefined[, c("x_umap", "y_umap")],
    color_values = embedding_predefined$type %>% as.factor(),
    label = paste0(EMBEDDING_TITLE_PREFIX, "; Type"),
    label_position = NULL,
    show_color_value_labels = FALSE,
    show_color_legend = TRUE,
    geom_point_size = GEOM_POINT_SIZE,
    sort_values = FALSE,
    rasterise = TRUE,
    legend_size = 2
) +
    scale_color_manual(
        values = scales::hue_pal()(
            embedding_predefined$type %>% unique() %>% length()
        )
    ) +
    theme_customized(legend_key_size = 2, legend_text_size = 5)
list(
    p_embedding_predefined_cell_type,
    p_embedding_predefined_region,
    p_embedding_predefined_donor,
    p_embedding_predefined_version,
    p_embedding_predefined_source,
    p_embedding_predefined_type
) %>%
    purrr::reduce(`+`) +
    patchwork::plot_layout(ncol = 3) +
    patchwork::plot_annotation(
        theme = theme(plot.margin = margin())
    )

Mitochondria ratio distribution

embedding_predefined$percent_mito %>% range()
## [1] 0.0000000 0.1999672
p_embedding_predefined_MT <- plot_embedding(
    embedding = embedding_predefined[, c("x_umap", "y_umap")],
    color_values = embedding_predefined$percent_mito,
    label = paste0(EMBEDDING_TITLE_PREFIX, "; Mitochondria %"),
    label_position = NULL,
    show_color_value_labels = FALSE,
    show_color_legend = TRUE,
    geom_point_size = GEOM_POINT_SIZE,
    geom_point_alpha = 1,
    sort_values = TRUE,
    shuffle_values = FALSE,
    label_size = 2.5,
    label_hjust = 0,
    label_vjust = 0,
    rasterise = TRUE,
    dpi = 600,
    legend_size = 2,
    legend_ncol = 1
) +
    theme_customized(
        x = 0.035,
        y = 0.995,
        legend_key_size = 1.5,
        legend_text_size = 4,
        border_color = "#b3b3b3",
        strip_color = "#b3b3b3"
    )

MT_RATIO_THRESHOLD <- 0.15
p_embedding_predefined_MT2 <- plot_embedding(
    embedding = embedding_predefined[, c("x_umap", "y_umap")],
    color_values = as.numeric(
        embedding_predefined$percent_mito >= MT_RATIO_THRESHOLD
    ) %>% as.factor(),
    label = paste(
        "UMAP", MT_RATIO_THRESHOLD,
        sum(embedding_predefined$percent_mito >= MT_RATIO_THRESHOLD),
        sep = "; "
    ),
    label_position = NULL,
    show_color_value_labels = FALSE,
    show_color_legend = FALSE,
    geom_point_size = GEOM_POINT_SIZE,
    sort_values = TRUE,
    rasterise = TRUE,
    legend_size = 2
) +
    scale_color_manual(
        values = c("grey70", "salmon")
    ) +
    theme_customized(legend_key_size = 2, legend_text_size = 5)


The mitochondria ratios are extracted from h5ad file download from the HCA portal. There are 0 cells with mitochondria ratio higher than 0.2.

list(p_embedding_predefined_MT, p_embedding_predefined_MT2) %>%
    purrr::reduce(`+`) +
    patchwork::plot_layout(ncol = 2) +
    patchwork::plot_annotation(
        theme = theme(plot.margin = margin())
    )

embedding_predefined %>%
    dplyr::group_by(source) %>%
    dplyr::summarise(
        num_cells = n(),
        median_mt_ratio_reported = median(percent_mito)
    ) %>%
    gt::gt() %>%
    gt::tab_options(table.font.size = "median")
source num_cells median_mt_ratio_reported
CD45+ 80597 0.046094750
Cells 45885 0.072591010
Nuclei 359652 0.001283697


Doublets and unassigned cells

purrr::map2(list("doublets", "NotAssigned"), c(0.15, 0.15), function(x, y) {
    plot_embedding(
        embedding = embedding_predefined[, c("x_umap", "y_umap")],
        color_values = as.numeric(embedding_predefined$cell_type == x) %>% as.factor(),
        label = paste(
            "UMAP", x, sum(embedding_predefined$cell_type == x),
            sep = "; "
        ),
        label_position = NULL,
        show_color_value_labels = FALSE,
        show_color_legend = FALSE,
        geom_point_size = y,
        sort_values = TRUE,
        rasterise = TRUE
    ) +
        scale_color_manual(
            values = c("grey70", "salmon")
        ) +
        theme_customized()
}) %>%
    purrr::reduce(`+`) +
    patchwork::plot_layout(ncol = 2) +
    patchwork::plot_annotation(
        theme = theme(plot.margin = margin())
    )

p_embedding_predefined_scrublet <- plot_embedding(
    embedding = embedding_predefined[, c("x_umap", "y_umap")],
    color_values = embedding_predefined$scrublet_score,
    label = paste0(EMBEDDING_TITLE_PREFIX, "; Scrublet_score"),
    label_position = NULL,
    show_color_value_labels = FALSE,
    show_color_legend = TRUE,
    geom_point_size = GEOM_POINT_SIZE,
    geom_point_alpha = 1,
    sort_values = TRUE,
    shuffle_values = FALSE,
    label_size = 2.5,
    label_hjust = 0,
    label_vjust = 0,
    rasterise = TRUE,
    dpi = 600,
    legend_size = 3,
    legend_ncol = 1
) +
    theme_customized(
        x = 0.035,
        y = 0.995,
        legend_key_size = 1.5,
        legend_text_size = 4,
        border_color = "#b3b3b3",
        strip_color = "#b3b3b3"
    )

SCRUBLET_SCORE_THRESHOLD <- 0.3
p_embedding_predefined_scrublet2 <- plot_embedding(
    embedding = embedding_predefined[, c("x_umap", "y_umap")],
    color_values = as.numeric(
        embedding_predefined$scrublet_score >= SCRUBLET_SCORE_THRESHOLD
    ) %>% as.factor(),
    label = paste(
        "UMAP", SCRUBLET_SCORE_THRESHOLD,
        sum(embedding_predefined$scrublet_score >= SCRUBLET_SCORE_THRESHOLD),
        sep = "; "
    ),
    label_position = NULL,
    show_color_value_labels = FALSE,
    show_color_legend = FALSE,
    geom_point_size = GEOM_POINT_SIZE,
    sort_values = TRUE,
    rasterise = TRUE
) +
    scale_color_manual(
        values = c("grey70", "salmon")
    ) +
    theme_customized()


The scrublet scores are extracted from h5ad file download from the HCA portal. There are 0 cells with scrublet scores higher than 0.3.

list(p_embedding_predefined_scrublet, p_embedding_predefined_scrublet2) %>%
    purrr::reduce(`+`) +
    patchwork::plot_layout(ncol = 2) +
    patchwork::plot_annotation(
        theme = theme(plot.margin = margin())
    )


The distribution of scrublet scores for cells annotated as “doublets” and “NotAssigned” in the publication.

embedding_predefined %>%
    dplyr::filter(cell_type %in% c("doublets", "NotAssigned")) %>%
    dplyr::group_by(cell_type) %>%
    dplyr::summarise(
        num_cells = n(),
        median_scrublet_score_reported = median(scrublet_score),
        median_mt_ratio_reported = median(percent_mito)
    ) %>%
    gt::gt() %>%
    gt::tab_options(table.font.size = "median")
cell_type num_cells median_scrublet_score_reported median_mt_ratio_reported
doublets 623 0.1254753 0.007220217
NotAssigned 33998 0.1471215 0.011605416


Inconsistent cells

Cells not included after re-mapping.

embedding_predefined %>%
    dplyr::filter(
        is.na(num_umis)
    ) %>%
    dplyr::summarise(
        num_cells = n(),
        median_umis_reported = median(n_counts),
        median_features_reported = median(n_genes)
    ) %>%
    gt::gt() %>%
    gt::tab_options(table.font.size = "median")
num_cells median_umis_reported median_features_reported
4551 2680 1489


plot_embedding(
    embedding = embedding_predefined[, c("x_umap", "y_umap")],
    color_values = as.numeric(embedding_predefined$num_umis %>% is.na()) %>% as.factor(),
    label = paste(
        "UMAP", sum(embedding_predefined$num_umis %>% is.na()),
        sep = "; "
    ),
    label_position = NULL,
    show_color_value_labels = FALSE,
    show_color_legend = FALSE,
    geom_point_size = 0.3,
    sort_values = TRUE,
    rasterise = TRUE
) +
    scale_color_manual(values = c("grey70", "salmon")) +
    theme_customized()

Cell group

cells_selected_atrial <- c(
    "aCM1",
    "aCM2",
    "aCM3",
    "aCM4",
    "aCM5"
)

cells_selected_ventricular <- c(
    "vCM1",
    "vCM2",
    "vCM3",
    "vCM4",
    "vCM5"
)

cells_selected_vascular <- c(
    "EC1_cap",
    "EC10_CMC-like",
    "EC2_cap",
    "EC3_cap",
    "EC4_immune",
    "EC5_art",
    "EC6_ven",
    "EC7_atria",
    "EC8_ln",
    "EC9_FB-like",
    "Meso",
    "PC1_vent",
    "PC2_atria",
    "PC3_str",
    "PC4_CMC-like",
    "SMC1_basic",
    "SMC2_art"
)

cells_selected_fibroblast <- c(
    "FB1",
    "FB2",
    "FB3",
    "FB4",
    "FB5",
    "FB6",
    "FB7"
)

cells_selected_immune <- c(
    "B_cells",
    "CD14+Mo",
    "CD16+Mo",
    "CD4+T_cytox",
    "CD4+T_tem",
    "CD8+T_cytox",
    "CD8+T_tem",
    "DC",
    "DOCK4+MØ1",
    "DOCK4+MØ2",
    "doublets",
    "IL17RA+Mo",
    "LYVE1+MØ1",
    "LYVE1+MØ2",
    "LYVE1+MØ3",
    "Mast",
    "MØ_AgP",
    "MØ_mod",
    "Mo_pi",
    "NK",
    "NKT",
    "NØ"
)

cells_selected_adipocyte <- c(
    "Adip1",
    "Adip2",
    "Adip3",
    "Adip4"
)

cells_selected_neuronal <- c(
    "NC1",
    "NC2",
    "NC3",
    "NC4",
    "NC5",
    "NC6"
)

cells_selected <- list(
    atrial = cells_selected_atrial,
    ventricular = cells_selected_ventricular,
    vascular = cells_selected_vascular,
    fibroblast = cells_selected_fibroblast,
    immune = cells_selected_immune,
    adipocyte = cells_selected_adipocyte,
    neuronal = cells_selected_neuronal
)
GEOM_POINT_SIZE <- 0.1

purrr::map2(names(cells_selected), c(TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE), function(x, y) {
    cells_selected_in_group <- cells_selected[[x]]

    color_palette_cell_state <- setNames(
        object = c("grey70", scales::hue_pal()(length(cells_selected_in_group))),
        nm = c("Other", cells_selected_in_group)
    )

    cell_type_labels <- get_middle_points(
        embedding = embedding_predefined[, c("x_umap", "y_umap", "cell_states")],
        x = "x_umap",
        y = "y_umap",
        group = "cell_states"
    ) %>%
        filter(cell_states %in% cells_selected_in_group)

    plot_embedding(
        embedding = embedding_predefined[, c("x_umap", "y_umap", "cell_states")],
        color_values = embedding_predefined %>%
            mutate(
                cell_states = case_when(
                    cell_states %in% cells_selected_in_group ~ cell_states,
                    TRUE ~ "Other"
                )
            ) %>%
            pull(cell_states) %>%
            as.factor() %>%
            forcats::fct_relevel("Other", after = Inf),
        label = paste0(EMBEDDING_TITLE_PREFIX, "; ", x),
        label_position = NULL,
        show_color_value_labels = FALSE,
        show_color_legend = y,
        geom_point_size = GEOM_POINT_SIZE,
        sort_values = FALSE,
        rasterise = TRUE,
        legend_ncol = 1
    ) +
        scale_color_manual(
            values = color_palette_cell_state
        ) +
        # theme_customized() +
        theme_customized(legend_key_size = 2, legend_text_size = 5) +
        ggrepel::geom_text_repel(
            data = cell_type_labels,
            ggplot2::aes(
                x = .data[["x_umap"]],
                y = .data[["y_umap"]],
                label = .data[["cell_states"]],
            ),
            color = "black",
            size = 1.8,
            family = "Arial",
            #
            box.padding = 0.4,
            point.padding = 1e-06,
            min.segment.length = 0,
            arrow = ggplot2::arrow(length = unit(0.015, "npc")),
            max.overlaps = Inf,
            nudge_x = 0,
            nudge_y = 0,
            #
            segment.color = "grey35",
            # segment.size = 0.25,
            segment.size = 0.1,
            segment.alpha = 1,
            # segment.inflect = TRUE,
            seed = 20201121
        )
}) %>%
    purrr::reduce(`+`) +
    patchwork::plot_layout(ncol = 3) +
    patchwork::plot_annotation(
        theme = theme(plot.margin = margin())
    )

embedding_predefined %>%
    tidyr::drop_na() %>%
    dplyr::group_by(cell_states) %>%
    dplyr::summarize(
        num_cells = n(),
        median_umi = median(num_umis),
        median_features = median(num_features),
        median_mt_percentage = median(mt_percentage),
        median_scrublet_score_reported = median(scrublet_score)
    ) %>%
    gt::gt() %>%
    gt::tab_options(table.font.size = "median")
cell_states num_cells median_umi median_features median_mt_percentage median_scrublet_score_reported
aCM1 12511 2620.0 1278.0 0.0007818608 0.09822866
aCM2 4613 3105.0 1552.0 0.0007087172 0.10806175
aCM3 4018 3042.0 1358.5 0.0007296163 0.09822866
aCM4 1554 3136.5 1491.5 0.0008284325 0.11347518
aCM5 187 3396.0 1619.0 0.0008121003 0.16473318
Adip1 2235 2922.0 1379.0 0.0005921247 0.09822866
Adip2 972 8539.5 3630.5 0.0009412824 0.18575064
Adip3 269 4170.0 1788.0 0.0006259781 0.11347518
Adip4 227 2357.0 1348.0 0.0015748031 0.16473318
B_cells 1162 1913.5 939.5 0.0228684060 0.13214990
CD14+Mo 1876 3460.5 1311.5 0.0632523414 0.09822866
CD16+Mo 3243 3874.0 1530.0 0.0424010847 0.13214990
CD4+T_cytox 3055 927.0 565.0 0.0258379888 0.09822866
CD4+T_tem 1028 2639.5 955.0 0.0310788449 0.10806175
CD8+T_cytox 2824 2251.0 1107.0 0.0209109813 0.09822866
CD8+T_tem 2870 1101.0 714.0 0.0077821012 0.08554572
DC 805 2450.0 1396.0 0.0060975610 0.11926606
DOCK4+MØ1 3231 902.0 641.0 0.0033305579 0.08952959
DOCK4+MØ2 1495 1351.0 896.0 0.0015302219 0.07161804
doublets 615 717.0 494.0 0.0069930070 0.12547529
EC1_cap 27325 1379.0 815.0 0.0371859296 0.08554572
EC10_CMC-like 2585 2464.0 1224.0 0.0381282496 0.09822866
EC2_cap 13419 1586.0 898.0 0.0331683168 0.08952959
EC3_cap 16843 2085.0 1093.0 0.0247015233 0.09822866
EC4_immune 5612 1551.0 889.0 0.0492429450 0.09375000
EC5_art 20218 2212.0 1185.0 0.0310671082 0.10299003
EC6_ven 8332 2181.0 1148.0 0.0249139179 0.10299003
EC7_atria 4478 1123.0 753.0 0.0020844195 0.13934426
EC8_ln 734 1605.5 1029.5 0.0073016482 0.12547529
EC9_FB-like 520 2345.0 1481.5 0.0035700141 0.16473318
FB1 26555 1110.0 701.0 0.0020181635 0.10299003
FB2 13484 1216.0 784.0 0.0013404826 0.11926606
FB3 7525 1253.0 779.0 0.0017391304 0.12547529
FB4 6057 1389.0 871.0 0.0024600246 0.11926606
FB5 2507 1298.0 822.0 0.0027422303 0.10806175
FB6 1593 2705.0 1621.0 0.0024742805 0.17475728
FB7 910 3101.0 1704.5 0.0034325998 0.17475728
IL17RA+Mo 32 4715.5 2431.0 0.0012185808 0.10823261
LYVE1+MØ1 2955 2666.0 1307.0 0.0149476831 0.07821229
LYVE1+MØ2 2085 815.0 556.0 0.0058823529 0.09375000
LYVE1+MØ3 1924 1795.0 927.5 0.0075810110 0.08952959
Mast 1524 965.5 690.5 0.0018691654 0.04661017
Meso 718 2023.0 1082.0 0.0076335878 0.13934426
MØ_AgP 1272 4160.5 1508.5 0.0510975988 0.13934426
MØ_mod 1307 3069.0 1257.0 0.0530805687 0.08952959
Mo_pi 1640 1121.0 625.0 0.0634648370 0.14712154
nan 33767 2234.0 1259.0 0.0113879004 0.14712154
NC1 2977 889.0 632.0 0.0028901734 0.07482993
NC2 434 2599.5 1576.0 0.0029268404 0.11926606
NC3 145 2188.0 1207.0 0.0103848503 0.12547529
NC4 125 4677.0 2143.0 0.0016353230 0.13934426
NC5 84 3008.0 1762.5 0.0014192650 0.04095904
NC6 20 1627.0 1093.0 0.0022270115 0.14712154
NK 3591 2037.0 984.0 0.0276782807 0.06565657
NKT 1450 1138.5 678.0 0.0319841083 0.09375000
121 1092.0 497.0 0.0654008439 0.13214990
PC1_vent 49729 1231.0 746.0 0.0026455026 0.07482993
PC2_atria 10700 1505.0 914.0 0.0017618559 0.07161804
PC3_str 14217 1709.0 999.0 0.0190373563 0.11347518
PC4_CMC-like 2197 2901.0 1553.0 0.0016515277 0.15555556
SMC1_basic 12781 1651.0 938.0 0.0033112583 0.08177905
SMC2_art 3012 3713.0 1552.5 0.0284008680 0.10299003
vCM1 71162 3593.0 1547.0 0.0006483332 0.10299003
vCM2 25658 4019.0 1734.0 0.0006184929 0.10806175
vCM3 20168 3514.0 1506.0 0.0005975203 0.10806175
vCM4 7651 4055.0 1657.0 0.0006600116 0.11347518
vCM5 650 3606.0 1683.5 0.0009720928 0.16473318


Expression

Embedding

# start
FEATURES_SELECTED_A <- c(
    "ENSG00000092054_MYH7",
    "ENSG00000111245_MYL2",
    "ENSG00000115641_FHL2",
    "ENSG00000175206_NPPA",
    "ENSG00000106631_MYL7",
    "ENSG00000198336_MYL4",
    "ENSG00000133392_MYH11",
    "ENSG00000149591_TAGLN",
    "ENSG00000107796_ACTA2"
)

FEATURES_SELECTED_B <- c(
    "ENSG00000143248_RGS5",
    "ENSG00000069431_ABCC9",
    "ENSG00000121361_KCNJ8",
    "ENSG00000119927_GPAM",
    "ENSG00000169710_FASN",
    "ENSG00000174697_LEP",
    "ENSG00000011465_DCN",
    "ENSG00000148180_GSN",
    "ENSG00000134853_PDGFRA"
)

FEATURES_SELECTED_C <- c(
    "ENSG00000110799_VWF",
    "ENSG00000261371_PECAM1",
    "ENSG00000179776_CDH5",
    "ENSG00000123560_PLP1",
    "ENSG00000179915_NRXN1",
    "ENSG00000021645_NRXN3",
    "ENSG00000170458_CD14",
    "ENSG00000173372_C1QA",
    "ENSG00000129226_CD68",
    "ENSG00000153563_CD8A",
    "ENSG00000168685_IL7R",
    "ENSG00000102245_CD40LG",
    "ENSG00000102854_MSLN",
    "ENSG00000184937_WT1",
    "ENSG00000169594_BNC1"
)
FEATURES_SELECTED <- c(
    FEATURES_SELECTED_A,
    FEATURES_SELECTED_B,
    FEATURES_SELECTED_C
)


Grey: cells included in the publication but have low UMI counts after re-mapping.

GEOM_POINT_SIZE <- 0.15

purrr::map(FEATURES_SELECTED, function(x) {
    SELECTED_FEATURE <- x

    plot_embedding(
        embedding = embedding_predefined[, c("x_umap", "y_umap")],
        color_values = log10(
            calc_cpm_anndata(
                anndata = adata,
                k = SELECTED_FEATURE,
                cells = embedding_predefined$cell
            ) + 1
        ),
        label = paste0(EMBEDDING_TITLE_PREFIX, "; ", SELECTED_FEATURE),
        label_position = NULL,
        show_color_value_labels = FALSE,
        show_color_legend = TRUE,
        geom_point_size = GEOM_POINT_SIZE,
        geom_point_alpha = 1,
        sort_values = TRUE,
        shuffle_values = FALSE,
        # label_size = 2.5,
        label_hjust = 0,
        label_vjust = 0,
        rasterise = TRUE,
        dpi = 600,
        legend_size = 2,
        legend_ncol = 1
    ) +
        theme_customized(
            x = 0.035,
            y = 0.995,
            legend_key_size = 1.5,
            legend_text_size = 4,
            border_color = "#b3b3b3",
            strip_color = "#b3b3b3"
        )
}) %>%
    purrr::reduce(`+`) +
    patchwork::plot_layout(ncol = 3) +
    patchwork::plot_annotation(
        theme = theme(plot.margin = margin())
    )


Lollipop


vCM

FEATURES_SELECTED <- c(
    "ENSG00000115641_FHL2",
    "ENSG00000092054_MYH7",
    "ENSG00000111245_MYL2",
    "ENSG00000169851_PCDH7",
    "ENSG00000169760_NLGN1",
    #
    "ENSG00000140945_CDH13",
    "ENSG00000186314_PRELID2",
    "ENSG00000282917_AC107068.2",
    "ENSG00000249797_LINC02147",
    #
    "ENSG00000162614_NEXN",
    "ENSG00000148677_ANKRD1",
    "ENSG00000022267_FHL1",
    "ENSG00000163092_XIRP2",
    "ENSG00000100345_MYH9",
    "ENSG00000198842_DUSP27",
    "ENSG00000168334_XIRP1",
    "ENSG00000130176_CNN1",
    #
    "ENSG00000109846_CRYAB",
    "ENSG00000101608_MYL12A",
    "ENSG00000075624_ACTB",
    "ENSG00000189043_NDUFA4",
    "ENSG00000127184_COX7C",
    "ENSG00000135940_COX5B",
    "ENSG00000147123_NDUFB11",
    #
    "ENSG00000164741_DLC1",
    "ENSG00000164330_EBF1",
    "ENSG00000134532_SOX5",
    "ENSG00000221818_EBF2",
    "ENSG00000169282_KCNAB1"
)

cells_states_selected <- c(
    "vCM1", "vCM2", "vCM3", "vCM4", "vCM5"
)
cells_selected_lollipop <- purrr::map(cells_states_selected, function(x) {
    embedding_predefined %>%
        filter(cell_states == x) %>%
        pull(cell)
})
names(cells_selected_lollipop) <- cells_states_selected
matrix_cpm_subset <- purrr::map(FEATURES_SELECTED, function(x) {
    v <- calc_cpm_anndata(
        anndata = adata,
        k = x,
        cells = embedding_predefined$cell
    )
    v[is.na(v)] <- 0

    return(v)
}) %>%
    purrr::reduce(rbind)
rownames(matrix_cpm_subset) <- FEATURES_SELECTED


Extended Data Fig. 3a

plot_lollipop(
    cells = cells_selected_lollipop,
    features = FEATURES_SELECTED,
    matrix_cpm = matrix_cpm_subset,
    color_range_limits = NULL
)

aCM

# grep(pattern = "gsn", x = rownames(adata$var), ignore.case = TRUE, value = TRUE)
FEATURES_SELECTED <- c(
    "ENSG00000197616_MYH6",
    "ENSG00000175206_NPPA",
    "ENSG00000198336_MYL4",
    "ENSG00000181072_CHRM2",
    "ENSG00000117114_ADGRL2",
    #
    "ENSG00000115641_FHL2",
    "ENSG00000184347_SLIT3",
    "ENSG00000105697_HAMP",
    "ENSG00000128918_ALDH1A2",
    "ENSG00000204928_GRXCR2",
    "ENSG00000162670_BRINP3",
    #
    "ENSG00000138347_MYPN",
    "ENSG00000211455_STK38L",
    "ENSG00000154553_PDLIM3",
    "ENSG00000198842_DUSP27",
    "ENSG00000100345_MYH9",
    "ENSG00000130176_CNN1",
    #
    "ENSG00000104879_CKM",
    "ENSG00000189043_NDUFA4",
    "ENSG00000131143_COX4I1",
    "ENSG00000121769_FABP3",
    #
    "ENSG00000164741_DLC1",
    "ENSG00000127472_PLA2G5",
    "ENSG00000184384_MAML2",
    "ENSG00000249669_CARMN",
    "ENSG00000148180_GSN"
)

cells_states_selected <- c(
    "aCM1", "aCM2", "aCM3", "aCM4", "aCM5"
)
cells_selected_lollipop <- purrr::map(cells_states_selected, function(x) {
    embedding_predefined %>%
        filter(cell_states == x) %>%
        pull(cell)
})
names(cells_selected_lollipop) <- cells_states_selected
matrix_cpm_subset <- purrr::map(FEATURES_SELECTED, function(x) {
    v <- calc_cpm_anndata(
        anndata = adata,
        k = x,
        cells = embedding_predefined$cell
    )
    v[is.na(v)] <- 0

    return(v)
}) %>%
    purrr::reduce(rbind)
rownames(matrix_cpm_subset) <- FEATURES_SELECTED


Extended Data Fig. 3b

plot_lollipop(
    cells = cells_selected_lollipop,
    features = FEATURES_SELECTED,
    matrix_cpm = matrix_cpm_subset,
    color_range_limits = NULL
)

Celluar composition

prepare_cluster_composition(
    embedding = embedding_predefined,
    x = region,
    group = cell_type
) %>%
    plot_barplot(
        x = region,
        y = percentage,
        z = cell_type,
        legend_ncol = 2
    ) +
    theme_bw(base_size = 6) +
    theme(
        legend.key.size = grid::unit(3, "mm")
    )



R session info

devtools::session_info()$platform
##  setting  value                       
##  version  R version 4.0.4 (2021-02-15)
##  os       macOS Big Sur 10.16         
##  system   x86_64, darwin20.3.0        
##  ui       unknown                     
##  language (EN)                        
##  collate  en_US.UTF-8                 
##  ctype    en_US.UTF-8                 
##  tz       America/Chicago             
##  date     2021-03-12
devtools::session_info()$pack %>%
    as_tibble() %>%
    dplyr::select(
        package,
        loadedversion,
        date,
        `source`
    ) %>%
    # print(n = nrow(.))
    gt::gt() %>%
    gt::tab_options(table.font.size = "median")
package loadedversion date source
assertthat 0.2.1 2019-03-21 CRAN (R 4.0.0)
backports 1.2.1 2020-12-09 CRAN (R 4.0.3)
beeswarm 0.3.1 2021-03-07 CRAN (R 4.0.4)
broom 0.7.5.9000 2021-03-08 Github (tidymodels/broom@1d68975)
bslib 0.2.4.9002 2021-02-25 Github (rstudio/bslib@aa5a842)
cachem 1.0.4.9000 2021-02-25 Github (r-lib/cachem@5964320)
callr 3.5.1.9000 2021-02-12 Github (r-lib/callr@0ca92e1)
cellranger 1.1.0 2016-07-27 CRAN (R 4.0.0)
checkmate 2.0.0 2020-02-06 CRAN (R 4.0.0)
cli 2.3.1 2021-02-23 CRAN (R 4.0.4)
colorspace 2.0-0 2020-11-10 R-Forge (R 4.0.3)
crayon 1.4.1 2021-02-08 CRAN (R 4.0.3)
DBI 1.1.1 2021-01-15 CRAN (R 4.0.3)
dbplyr 2.1.0 2021-02-03 CRAN (R 4.0.3)
debugme 1.1.0.9001 2021-02-27 Github (r-lib/debugme@e7df798)
desc 1.3.0 2021-03-05 CRAN (R 4.0.4)
devtools 2.3.2.9000 2021-02-23 Github (r-lib/devtools@4a55464)
digest 0.6.27 2020-10-24 CRAN (R 4.0.3)
dplyr 1.0.5.9000 2021-03-10 Github (tidyverse/dplyr@17fb462)
ellipsis 0.3.1 2020-05-15 CRAN (R 4.0.3)
evaluate 0.14 2019-05-28 CRAN (R 4.0.0)
extrafont 0.17 2014-12-08 CRAN (R 4.0.3)
extrafontdb 1.0 2012-06-11 CRAN (R 4.0.0)
fansi 0.4.2 2021-01-15 CRAN (R 4.0.3)
farver 2.1.0 2021-02-28 CRAN (R 4.0.4)
fastmap 1.1.0 2021-01-25 CRAN (R 4.0.3)
forcats 0.5.1.9000 2021-02-17 Github (tidyverse/forcats@b5fce89)
fs 1.5.0 2020-07-31 CRAN (R 4.0.3)
generics 0.1.0 2020-10-31 CRAN (R 4.0.3)
ggbeeswarm 0.6.0 2017-08-07 CRAN (R 4.0.3)
ggplot2 3.3.3.9000 2021-03-05 Github (tidyverse/ggplot2@4555055)
ggrastr 0.2.3 2021-03-01 Github (VPetukhov/ggrastr@1ef0ff5)
glue 1.4.1.9000 2021-02-19 Github (tidyverse/glue@f0a7b2a)
gt 0.2.2 2021-03-08 Github (rstudio/gt@e619ecb)
gtable 0.3.0 2019-03-25 CRAN (R 4.0.0)
haven 2.3.1 2020-06-01 CRAN (R 4.0.0)
highr 0.8 2019-03-20 CRAN (R 4.0.0)
hms 1.0.0 2021-01-13 CRAN (R 4.0.3)
htmltools 0.5.1.9000 2021-02-25 Github (rstudio/htmltools@ac43afe)
httr 1.4.2 2020-07-20 CRAN (R 4.0.2)
jquerylib 0.1.3 2021-02-10 Github (rstudio/jquerylib@94b1a3b)
jsonlite 1.7.2 2020-12-09 CRAN (R 4.0.3)
knitr 1.31.5 2021-02-12 Github (yihui/knitr@ca09938)
labeling 0.4.2 2020-10-20 CRAN (R 4.0.3)
lattice 0.20-41 2020-04-02 CRAN (R 4.0.4)
lifecycle 1.0.0 2021-02-15 CRAN (R 4.0.3)
lubridate 1.7.10 2021-03-02 Github (tidyverse/lubridate@ba6d598)
magrittr 2.0.1.9000 2020-12-14 Github (tidyverse/magrittr@bb1c86a)
Matrix 1.3-2 2021-01-06 CRAN (R 4.0.3)
memoise 2.0.0 2021-01-26 CRAN (R 4.0.3)
modelr 0.1.8.9000 2021-02-17 Github (tidyverse/modelr@16168e0)
munsell 0.5.0 2018-06-12 CRAN (R 4.0.0)
patchwork 1.1.1 2020-12-17 CRAN (R 4.0.3)
pillar 1.5.1 2021-03-05 CRAN (R 4.0.4)
pkgbuild 1.2.0 2020-12-15 CRAN (R 4.0.3)
pkgconfig 2.0.3 2019-09-22 CRAN (R 4.0.0)
pkgload 1.2.0 2021-02-23 CRAN (R 4.0.4)
png 0.1-7 2013-12-03 CRAN (R 4.0.0)
prettyunits 1.1.1.9000 2020-11-23 Github (r-lib/prettyunits@b1cdad8)
processx 3.4.5 2020-11-30 CRAN (R 4.0.3)
ps 1.6.0 2021-02-28 CRAN (R 4.0.4)
purrr 0.3.4.9000 2021-02-04 Github (tidyverse/purrr@af06d45)
R6 2.5.0 2021-02-04 Github (r-lib/R6@6cf7d4e)
ragg 1.1.1.9000 2021-03-05 Github (r-lib/ragg@2e70155)
Rcpp 1.0.6 2021-01-15 CRAN (R 4.0.3)
readr 1.4.0.9000 2021-03-05 Github (tidyverse/readr@9fd1160)
readxl 1.3.1.9000 2021-02-17 Github (tidyverse/readxl@9f85fa5)
remotes 2.2.0.9000 2021-02-09 Github (r-lib/remotes@69a8bd1)
reprex 1.0.0 2021-01-27 CRAN (R 4.0.3)
reticulate 1.18 2020-10-25 CRAN (R 4.0.3)
rlang 0.4.10.9000 2021-03-08 Github (r-lib/rlang@e0a0761)
rmarkdown 2.7.3 2021-03-05 Github (rstudio/rmarkdown@61db7a9)
rprojroot 2.0.2 2020-11-15 CRAN (R 4.0.3)
rstudioapi 0.13.0-9000 2021-02-25 Github (rstudio/rstudioapi@8ed4d50)
Rttf2pt1 1.3.8 2020-01-10 CRAN (R 4.0.0)
rvest 1.0.0 2021-03-09 CRAN (R 4.0.4)
sass 0.3.1 2021-01-24 CRAN (R 4.0.3)
scales 1.1.1 2020-05-11 CRAN (R 4.0.3)
sessioninfo 1.1.1 2018-11-05 CRAN (R 4.0.3)
stringi 1.5.3 2020-09-09 CRAN (R 4.0.3)
stringr 1.4.0.9000 2021-02-17 Github (tidyverse/stringr@1f03eb0)
styler 1.3.2.9000 2021-03-05 Github (r-lib/styler@30b3c0a)
systemfonts 1.0.1.9000 2021-02-09 Github (r-lib/systemfonts@bc0b76a)
testthat 3.0.2.9000 2021-02-15 Github (r-lib/testthat@4793514)
textshaping 0.3.2.9000 2021-03-10 Github (r-lib/textshaping@a5b5e4c)
tibble 3.1.0.9000 2021-02-25 Github (tidyverse/tibble@01280ac)
tidyr 1.1.3.9000 2021-03-05 Github (tidyverse/tidyr@2fd80d5)
tidyselect 1.1.0 2020-05-11 CRAN (R 4.0.3)
tidyverse 1.3.0.9000 2021-03-10 Github (tidyverse/tidyverse@8a0bb99)
usethis 2.0.1.9000 2021-03-05 Github (r-lib/usethis@4819d19)
utf8 1.1.4 2018-05-24 CRAN (R 4.0.0)
vctrs 0.3.6 2020-12-17 CRAN (R 4.0.3)
vipor 0.4.5 2017-03-22 CRAN (R 4.0.0)
viridisLite 0.3.0 2018-02-01 CRAN (R 4.0.0)
withr 2.4.1 2021-01-26 CRAN (R 4.0.3)
xfun 0.21 2021-02-10 CRAN (R 4.0.3)
xml2 1.3.2 2020-04-23 CRAN (R 4.0.0)
yaml 2.2.1 2020-02-01 CRAN (R 4.0.0)