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.
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"
source(
    file = file.path(
        SCRIPT_DIR,
        "utilities.R"
    )
)PROJECT_DIR <- "/Users/jialei/Dropbox/Data/Projects/UTSW/HCM/"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"
)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()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 | 
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 | 
Cell embedding and annotation are extracted from h5ad file provided on the HCA portal.
EMBEDDING_TITLE_PREFIX <- "UMAP"
embedding_type <- "predefined"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())
    )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 | 
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 | 
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()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 | 
| NØ | 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 | 
# 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())
    )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_selectedmatrix_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_SELECTEDExtended 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_selectedmatrix_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_SELECTEDExtended Data Fig. 3b
plot_lollipop(
    cells = cells_selected_lollipop,
    features = FEATURES_SELECTED,
    matrix_cpm = matrix_cpm_subset,
    color_range_limits = NULL
)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")
    )
 
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) |