Differential expression analysis of Paraventricular nucleus astrocytes dataset from Lopez JP et al 2021

Author

Evgenii O. Tretiakov

Published

July 26, 2023

Load data and setup parameters

Code
# Load tidyverse infrastructure packages
suppressPackageStartupMessages({
  library(future)
  library(here)
  library(tidyverse)
  library(magrittr)
  library(stringr)
  library(skimr)
  library(RColorBrewer)
  library(viridis)
})


# Load packages for scRNA-seq analysis and visualisation
suppressPackageStartupMessages({
  library(ggplot2)
  library(cowplot)
  library(patchwork)
  library(ggstatsplot)
  library(dabestr)
  library(sceasy)
  library(anndata)
  library(Seurat)
  library(SeuratDisk)
  library(SeuratWrappers)
  library(schex)
  library(scCustomize)
})

sc <- import("scanpy", convert = FALSE)

Set paths

Code
src_dir <- here("code")
data_dir <- here("data")
output_dir <- here("output")
plots_dir <- here(output_dir, "figures/")
tables_dir <- here(output_dir, "tables/")

Load helper functions and gene-sets

Code
source(here(src_dir, "genes.R"))
source(here(src_dir, "functions.R"))

Set fixed variables

Code
# set seed
reseed <- 42
set.seed(seed = reseed)

# Parameters for parallel execution
n_cores <- 32
plan("multisession", workers = n_cores)
options(
  future.globals.maxSize = 100000 * 1024^2,
  future.rng.onMisuse = "ignore"
)
plan()
multisession:
- args: function (..., workers = 32, envir = parent.frame())
- tweaked: TRUE
- call: plan("multisession", workers = n_cores)
Code
# ggplot2 theme
theme_set(ggmin::theme_powerpoint())
Code
bioproject <- "PRJNA679294"
project <- "lopez2021_PVN"
cb_fpr <- 0.001
low_cutoff_gene <- 500
high_cutoff_gene <- NULL
high_cutoff_gene <- 7500
low_cutoff_umis <- NULL
low_cutoff_umis <- -Inf
high_cutoff_umis <- 35000
high_cutoff_pc_mt <- 15
high_cutoff_pc_ribo <- 10
high_cutoff_pc_hb <- 0.1
high_cutoff_doublet_score <- 0.33
high_cutoff_complexity <- 0.85

Load selected astrocytes data from Lopez JP et al (2021)

Code
anndata <- sc$read(here(
  data_dir,
  sprintf("class_cello/%s-whole_dataset-%s-cello_annotation.h5ad", bioproject, cb_fpr)
))

Convert adata object to R AnnDataR6 object.

Code
adata <- py_to_r(anndata)
class(adata)
[1] "AnnDataR6" "R6"       
Code
class(adata$X)
[1] "dgCMatrix"
attr(,"package")
[1] "Matrix"
Code
adata
AnnData object with n_obs × n_vars = 9572 × 22835
    obs: 'nCount_RAW', 'nFeature_RAW', 'nCount_RNA', 'nFeature_RNA', 'orig.ident', 'nFeature_Diff', 'nCount_Diff', 'percent_mito', 'percent_ribo', 'percent_mito_ribo', 'percent_hb', 'log10GenesPerUMI', 'cell_name', 'barcode', 'latent_RT_efficiency', 'latent_cell_probability', 'latent_scale', 'doublet_score', 'predicted_doublets', 'QC', 'var_regex', 'RNA_snn_res.0.5', 'RNA_snn_res.0.741576329532297', 'RNA_snn_res.1.24913691074005', 'RNA_snn_res.3.000001', 'seurat_clusters', 'k_tree', 'comb_clstr1', 'S.Score', 'G2M.Score', 'Phase', 'nCount_SCT', 'nFeature_SCT', 'SCT_snn_res.1', 'SCT_snn_res.1.1014548330962', 'SCT_snn_res.1.22223389211258', 'SCT_snn_res.1.36843938820807', 'SCT_snn_res.1.54904506877152', 'SCT_snn_res.1.7778105049838', 'SCT_snn_res.2.07696233957953', 'SCT_snn_res.2.48489124123347', 'SCT_snn_res.3.07411084005006', 'SCT_snn_res.4.00000100000002', 'bioproject', 'project', 'model', 'tech', 'region', 'sex', 'stage', 'libname', 'expbtch', 'condit', 'ora_celltype'
    var: 'vst.mean', 'vst.variance', 'vst.variance.expected', 'vst.variance.standardized', 'vst.variable'
    uns: 'k_tree_colors', 'name', 'ora_celltype_colors'
    obsm: 'X_pacmap', 'X_pca', 'X_umap', 'ora_estimate', 'ora_pvals'
Code
srt_path <- here(
  data_dir,
  sprintf("%s-whole_dataset-%s-cello_annotation.h5ad", bioproject, cb_fpr)
)

expr_mtx <- t(as.matrix(adata$raw$X))
colnames(expr_mtx) <- rownames(adata$X)
rownames(expr_mtx) <- adata$var_names
srt <- CreateSeuratObject(
  expr_mtx,
  assay = "RNA",
  project = "individual_hypothalamic_nuclei_astrocytes_evaluation_dataset",
  meta.data = as.data.frame(adata$obs),
  row.names = colnames(adata$X)
)

Idents(srt) <- "ora_celltype"
srt <- subset(srt, idents = c("Astrocytes"))

Idents(srt) <- "libname"

print(srt)
An object of class Seurat 
22835 features across 2838 samples within 1 assay 
Active assay: RNA (22835 features, 0 variable features)
Code
rm(adata, anndata, expr_mtx)
invisible(gc())
Code
markers_region <-
  readr::read_csv(
    here(
      "data",
      "individual_hypothalamic_nuclei_astrocytes_evaluation_dataset-all-marker-genes-astrotrap.csv"
    ),
    col_types = cols(
      p_val = col_double(),
      avg_log2FC = col_double(),
      pct.1 = col_double(),
      pct.2 = col_double(),
      p_val_adj = col_double(),
      cluster = col_character(),
      gene = col_character(),
      pct_diff = col_double()
    )
  )
Code
markers_region <- markers_region %>%
  filter(pct.2 < 0.3, pct_diff > 0.1) %>%
  group_by(cluster)

at_top_50 <- Extract_Top_Markers(marker_dataframe = markers_region, num_genes = 50, group_by = "cluster", gene_column = "gene", rank_by = "avg_log2FC", make_unique = TRUE, named_vector = FALSE)

markers_region2 <- markers_region %>%
  filter(gene %in% c(nmr, npr, transcription_factors, mitochondrial)) %>%
  group_by(cluster)

at_top_50s <- Extract_Top_Markers(marker_dataframe = markers_region2, num_genes = 50, group_by = "cluster", gene_column = "gene", rank_by = "avg_log2FC", make_unique = TRUE, named_vector = FALSE)


selected_genes <- c(
  "Insr", "Meis1", "Igf1r", "Nrf1", "Prlr", "Camk1d", "Lars2", "Cacna2d3", # 0 ARC
  "Dcn", "Ptgds", "Nupr1", "Igfbp2", "Nrarp", "Ctnna2", "Ldlr", "Mmp14", # 1 LHA
  "Nkx6-2", "Cirbp", "Selenop", # 2 MnPO
  "Foxg1", "Crym", "Sema3c", "Meis2", "Dbp", # 3 POA
  "Egr1", "Ttr", "Btg2", "Mbnl3", "Pgf", "Irs4", "Gpr101", "Nr3c2", "Agtr1", # 4 PVN
  "Rfx4", "Dbx2", "Prokr2", "Cebpb", "Zic1", "Zic2", "Zic5", "Ccn1", "Gata4", "Klf4", "Klf10", # 5 SCN
  "Tbx3", "Fis1", "Ndn", "Psmc5", "Drap1", "Pcsk1n", "Rtn1", # 6 VMH
  "Emx2", "Sgip1", "Myoc", "Hivep3", "Dcc", "Ralyl", "Ltbp1", "Egfem1", # 7 VPH
  "Klf4", "Atf3", "Nrg1", "Cdk8", "Grpr", "Qrfpr", "Hcrtr1", "Hcrtr2", "Tacr1", "Trhr", "Tshr",
  "Gfap", "Fgf1", "Fgfr3", "Hepacam", "Hif1", "Htra1", "Lxn", "Ndrg2", "Ntn1", "Nfia", "Slit2", "Aqp4", "S100a1", "S100a6", "S100b", "Slc1a2", "Slc1a3", "Slc38a1", "Vegfa", "Fos", "Fosb", "Jun", "Junb", "Jund", "Ier2", "Socs3", "Pde10a", "Fbln5", "Otp", "Nr4a1", "Six6", "Emx2", "Myt1l", "Adcyap1r1", "Ghr", "Ntrk2", "Npy1r", "Gria1", "Gria2", "Grin2b", "Grin3a", "Grm3", "Grm7", "Gabrb1", "Gabbr1", "Gabbr2", "Rfx3", "Nr5a1", "Nkx2-1", "Otx2", "Bclaf1", "Foxo3", "Dlx1", "Lrrc6", "Peg3", "Elavl2", "Isl1", "Zfp36", "Otx1", "Pitx2",
  "2610507B11Rik",
  "5430405H02Rik",
  "9630014M24Rik",
  "Abi2",
  "Adam22",
  "AI480526",
  "Ank3",
  "Ap3m1",
  "Aplp1",
  "App",
  "Araf",
  "Arhgap12",
  "Arhgef10l",
  "Arhgef28",
  "Arpp21",
  "Arrb1",
  "Arsb",
  "Asic2",
  "Atg10",
  "Atp11b",
  "Atp1b1",
  "Atp1b3",
  "Atp6v1b2",
  "Azin1",
  "B3galt2",
  "Basp1",
  "Bicd1",
  "Bmt2",
  "Btg2",
  "Cacna1a",
  "Camta1",
  "Car10",
  "Ccser1",
  "Cd38",
  "Cdc26",
  "Cdc42",
  "Chd6",
  "Clstn1",
  "Coro2b",
  "Cry2",
  "Csmd2",
  "Csnk1g3",
  "Cyb5b",
  "Dcc",
  "Ddrgk1",
  "Ddx6",
  "Dennd5a",
  "Dlat",
  "Dlg2",
  "Dlg5",
  "Dnm2",
  "Dock9",
  "Dpp10",
  "Dscam",
  "Dync1i1",
  "Dzank1",
  "Dzip1",
  "Eef2",
  "Efr3b",
  "Egfem1",
  "Epas1",
  "Epha5",
  "Esco1",
  "Fam107a",
  "Fam155a",
  "Fam171a1",
  "Fam193a",
  "Fam219a",
  "Fbxw2",
  "Fer",
  "Fnbp1l",
  "Fos",
  "Gaa",
  "Gabrb2",
  "Gabrb3",
  "Gfap",
  "Gm1604a",
  "Gnas",
  "Gnl3l",
  "Gpr158",
  "Gprasp1",
  "Gria4",
  "Grik4",
  "Hk1",
  "Hmbox1",
  "Hsd17b12",
  "Id4",
  "Ipo9",
  "Jun",
  "Kcnip4",
  "Kif5a",
  "Klc1",
  "Klhl7",
  "Lcor",
  "Lhfpl3",
  "Lix1",
  "Lrrc8a",
  "Luzp1",
  "Ly6h",
  "Map2k1",
  "Map4k5",
  "Map7d2",
  "Mapk8",
  "Marcksl1",
  "Marf1",
  "Megf9",
  "Mia2",
  "Mindy2",
  "Mmp16",
  "mt-Cytb",
  "mt-Nd1",
  "mt-Nd2",
  "mt-Nd4",
  "Mthfd2l",
  "Mtss2",
  "Ncan",
  "Ncl",
  "Ndufc2",
  "Nfasc",
  "Nfix",
  "Nfs1",
  "Nhs",
  "Nkx6-2",
  "Nmnat2",
  "Nsf",
  "Nsg2",
  "Nxph1",
  "Ocrl",
  "Pam",
  "Paqr6",
  "Parp6",
  "Pcbp2",
  "Pcsk1n",
  "Pdgfd",
  "Pdss1",
  "Pdxdc1",
  "Pdzph1",
  "Pea15a",
  "Peg3",
  "Pet100",
  "Pi4ka",
  "Pkia",
  "Podxl2",
  "Prr14",
  "Psd2",
  "Rab11fip4",
  "Rab2a",
  "Rab6b",
  "Rac1",
  "Rad23b",
  "Ralyl",
  "Rbfox1",
  "Rbms3",
  "Rftn2",
  "Rgs7bp",
  "Rpl22",
  "Rpl30",
  "Rpl37a",
  "Rps14",
  "Rps6",
  "Rpsa",
  "Rtn1",
  "Samd12",
  "Scarb2",
  "Scd1",
  "Selenot",
  "Sfi1",
  "Shisa6",
  "Ski",
  "Slc12a6",
  "Slc25a3",
  "Smarcc1",
  "Snhg14",
  "Snrk",
  "Snrpn",
  "Sntg1",
  "Snx21",
  "Spcs2",
  "Spop",
  "Spred2",
  "Stk3",
  "Stxbp5l",
  "Taf1",
  "Tafa1",
  "Tbc1d5",
  "Tbc1d9b",
  "Tef",
  "Tenm2",
  "Tenm4",
  "Thra",
  "Thrsp",
  "Timp2",
  "Tmem106b",
  "Tmem245",
  "Tmsb4x",
  "Tmx4",
  "Tnr",
  "Tom1",
  "Tsix",
  "Tspan13",
  "Ttc3",
  "Ube2l3",
  "Ube2r2",
  "Vps13d",
  "Vps35l",
  "Vwa8",
  "Wasf3",
  "Wdr26",
  "Ywhae",
  "Zfp644",
  "Zwint"
)

selected_genes <- unique(c(selected_genes, at_top_50, at_top_50s, mitochondrial))

selected_genes <- selected_genes[selected_genes %in% rownames(GetAssayData(object = srt, slot = "data"))]
Code
srt <- NormalizeData(srt)
srt <- FindVariableFeatures(srt, selection.method = "vst", nfeatures = 5000)
all.genes <- rownames(srt)
srt <- ScaleData(srt, features = selected_genes)
Code
invisible(gc())
plan("sequential")
invisible(gc())
plan("multisession", workers = n_cores)
all_markers_genes <-
  FindAllMarkers(object = srt, verbose = T, test.use = "LR", latent.vars = c("nFeature_RNA"), only.pos = F, min.pct = 0, logfc.threshold = 0, random.seed = reseed, min.cells.feature = 1, return.thresh = 1, features = selected_genes)
all_markers_genes <-
  all_markers_genes %>%
  Add_Pct_Diff()

write_csv(all_markers_genes, here(data_dir, sprintf("%s-all-marker-genes-condition-goi.csv", bioproject)))
all_markers_genes
Code
all_markers_genes2 <- all_markers_genes %>%
  filter(
    gene %in% c(npr, nmr, transcription_factors)
  ) %>%
  arrange(desc(avg_log2FC))

at_top_5 <- Extract_Top_Markers(marker_dataframe = all_markers_genes, num_genes = 5, group_by = "cluster", gene_column = "gene", rank_by = "avg_log2FC", make_unique = TRUE, named_vector = FALSE)
at_top_30 <- Extract_Top_Markers(marker_dataframe = all_markers_genes, num_genes = 30, group_by = "cluster", gene_column = "gene", rank_by = "avg_log2FC")
at_top_10s <- Extract_Top_Markers(marker_dataframe = all_markers_genes2, num_genes = 10, group_by = "cluster", gene_column = "gene", rank_by = "avg_log2FC", make_unique = TRUE, named_vector = FALSE)
at_top_30s <- Extract_Top_Markers(marker_dataframe = all_markers_genes2, num_genes = 30, group_by = "cluster", gene_column = "gene", rank_by = "avg_log2FC")
Code
DotPlot_scCustom(seurat_object = srt, colors_use = viridis(n = 30, alpha = .75, direction = -1, option = "E"), features = at_top_5, flip_axes = T, x_lab_rotate = TRUE)

Code
DotPlot_scCustom(seurat_object = srt, colors_use = viridis(n = 30, alpha = .75, direction = -1, option = "E"), features = at_top_10s, flip_axes = T, x_lab_rotate = TRUE)

Code
DotPlot_scCustom(seurat_object = srt, colors_use = viridis(n = 30, alpha = .75, direction = -1, option = "E"), features = npr[npr %in% rownames(GetAssayData(object = srt, slot = "scale.data"))], flip_axes = T, x_lab_rotate = TRUE)

Code
DotPlot_scCustom(seurat_object = srt, colors_use = viridis(n = 30, alpha = .75, direction = -1, option = "E"), features = nmr[nmr %in% rownames(GetAssayData(object = srt, slot = "scale.data"))], flip_axes = T, x_lab_rotate = TRUE)

Code
DotPlot_scCustom(seurat_object = srt, colors_use = viridis(n = 30, alpha = .75, direction = -1, option = "E"), features = genes.embed[genes.embed %in% rownames(GetAssayData(object = srt, slot = "scale.data"))], flip_axes = T, x_lab_rotate = TRUE)

Code
DotPlot_scCustom(seurat_object = srt, colors_use = viridis(n = 30, alpha = .75, direction = -1, option = "E"), features = mitochondrial[mitochondrial %in% rownames(GetAssayData(object = srt, slot = "scale.data"))], flip_axes = T, x_lab_rotate = TRUE)

Code
Stacked_VlnPlot(seurat_object = srt, features = mitochondrial[mitochondrial %in% rownames(GetAssayData(object = srt, slot = "scale.data"))], x_lab_rotate = TRUE)

Code
DoHeatmap(srt, group.by = "condit", group.colors = c("0" = "black", "1" = "purple", "2" = "blue", "3" = "darkgreen", "4" = "green", "5" = "yellow", "6" = "red", "7" = "grey"), features = at_top_10s, size = 4, angle = 0) + NoLegend()

Code
map(selected_genes, function(x) {
  print(x)
  VlnPlot_scCustom(seurat_object = srt, features = x, raster = TRUE)
})
[1] "Insr"
[1] "Meis1"
[1] "Igf1r"
[1] "Nrf1"
[1] "Prlr"
[1] "Camk1d"
[1] "Lars2"
[1] "Cacna2d3"
[1] "Dcn"
[1] "Ptgds"
[1] "Nupr1"
[1] "Igfbp2"
[1] "Nrarp"
[1] "Ctnna2"
[1] "Ldlr"
[1] "Mmp14"
[1] "Nkx6-2"
[1] "Cirbp"
[1] "Selenop"
[1] "Foxg1"
[1] "Crym"
[1] "Sema3c"
[1] "Meis2"
[1] "Dbp"
[1] "Egr1"
[1] "Ttr"
[1] "Btg2"
[1] "Mbnl3"
[1] "Pgf"
[1] "Irs4"
[1] "Gpr101"
[1] "Nr3c2"
[1] "Rfx4"
[1] "Dbx2"
[1] "Prokr2"
[1] "Cebpb"
[1] "Zic1"
[1] "Zic2"
[1] "Zic5"
[1] "Ccn1"
[1] "Gata4"
[1] "Klf4"
[1] "Klf10"
[1] "Tbx3"
[1] "Fis1"
[1] "Ndn"
[1] "Psmc5"
[1] "Drap1"
[1] "Pcsk1n"
[1] "Rtn1"
[1] "Emx2"
[1] "Sgip1"
[1] "Myoc"
[1] "Hivep3"
[1] "Dcc"
[1] "Ralyl"
[1] "Ltbp1"
[1] "Egfem1"
[1] "Atf3"
[1] "Nrg1"
[1] "Cdk8"
[1] "Grpr"
[1] "Qrfpr"
[1] "Hcrtr1"
[1] "Hcrtr2"
[1] "Tacr1"
[1] "Trhr"
[1] "Tshr"
[1] "Gfap"
[1] "Fgf1"
[1] "Fgfr3"
[1] "Hepacam"
[1] "Htra1"
[1] "Lxn"
[1] "Ndrg2"
[1] "Ntn1"
[1] "Nfia"
[1] "Slit2"
[1] "Aqp4"
[1] "S100a1"
[1] "S100a6"
[1] "S100b"
[1] "Slc1a2"
[1] "Slc1a3"
[1] "Slc38a1"
[1] "Vegfa"
[1] "Fos"
[1] "Fosb"
[1] "Jun"
[1] "Junb"
[1] "Jund"
[1] "Ier2"
[1] "Socs3"
[1] "Pde10a"
[1] "Fbln5"
[1] "Otp"
[1] "Nr4a1"
[1] "Six6"
[1] "Myt1l"
[1] "Adcyap1r1"
[1] "Ghr"
[1] "Ntrk2"
[1] "Npy1r"
[1] "Gria1"
[1] "Gria2"
[1] "Grin2b"
[1] "Grin3a"
[1] "Grm3"
[1] "Grm7"
[1] "Gabrb1"
[1] "Gabbr1"
[1] "Gabbr2"
[1] "Rfx3"
[1] "Nr5a1"
[1] "Nkx2-1"
[1] "Otx2"
[1] "Bclaf1"
[1] "Foxo3"
[1] "Dlx1"
[1] "Lrrc6"
[1] "Peg3"
[1] "Elavl2"
[1] "Isl1"
[1] "Zfp36"
[1] "Otx1"
[1] "Pitx2"
[1] "2610507B11Rik"
[1] "5430405H02Rik"
[1] "9630014M24Rik"
[1] "Abi2"
[1] "Adam22"
[1] "AI480526"
[1] "Ank3"
[1] "Ap3m1"
[1] "Aplp1"
[1] "App"
[1] "Araf"
[1] "Arhgap12"
[1] "Arhgef10l"
[1] "Arhgef28"
[1] "Arpp21"
[1] "Arrb1"
[1] "Arsb"
[1] "Asic2"
[1] "Atg10"
[1] "Atp11b"
[1] "Atp1b1"
[1] "Atp1b3"
[1] "Atp6v1b2"
[1] "Azin1"
[1] "B3galt2"
[1] "Basp1"
[1] "Bicd1"
[1] "Bmt2"
[1] "Cacna1a"
[1] "Camta1"
[1] "Car10"
[1] "Ccser1"
[1] "Cd38"
[1] "Cdc26"
[1] "Cdc42"
[1] "Chd6"
[1] "Clstn1"
[1] "Coro2b"
[1] "Cry2"
[1] "Csmd2"
[1] "Csnk1g3"
[1] "Cyb5b"
[1] "Ddrgk1"
[1] "Ddx6"
[1] "Dennd5a"
[1] "Dlat"
[1] "Dlg2"
[1] "Dlg5"
[1] "Dnm2"
[1] "Dock9"
[1] "Dpp10"
[1] "Dscam"
[1] "Dync1i1"
[1] "Dzank1"
[1] "Dzip1"
[1] "Eef2"
[1] "Efr3b"
[1] "Epas1"
[1] "Epha5"
[1] "Esco1"
[1] "Fam107a"
[1] "Fam155a"
[1] "Fam171a1"
[1] "Fam193a"
[1] "Fam219a"
[1] "Fbxw2"
[1] "Fer"
[1] "Fnbp1l"
[1] "Gaa"
[1] "Gabrb2"
[1] "Gabrb3"
[1] "Gm1604a"
[1] "Gnas"
[1] "Gnl3l"
[1] "Gpr158"
[1] "Gprasp1"
[1] "Gria4"
[1] "Grik4"
[1] "Hk1"
[1] "Hmbox1"
[1] "Hsd17b12"
[1] "Id4"
[1] "Ipo9"
[1] "Kcnip4"
[1] "Kif5a"
[1] "Klc1"
[1] "Klhl7"
[1] "Lcor"
[1] "Lhfpl3"
[1] "Lix1"
[1] "Lrrc8a"
[1] "Luzp1"
[1] "Ly6h"
[1] "Map2k1"
[1] "Map4k5"
[1] "Map7d2"
[1] "Mapk8"
[1] "Marcksl1"
[1] "Marf1"
[1] "Megf9"
[1] "Mia2"
[1] "Mindy2"
[1] "Mmp16"
[1] "mt-Cytb"
[1] "mt-Nd1"
[1] "mt-Nd2"
[1] "mt-Nd4"
[1] "Mthfd2l"
[1] "Mtss2"
[1] "Ncan"
[1] "Ncl"
[1] "Ndufc2"
[1] "Nfasc"
[1] "Nfix"
[1] "Nfs1"
[1] "Nhs"
[1] "Nmnat2"
[1] "Nsf"
[1] "Nsg2"
[1] "Nxph1"
[1] "Ocrl"
[1] "Pam"
[1] "Paqr6"
[1] "Parp6"
[1] "Pcbp2"
[1] "Pdgfd"
[1] "Pdss1"
[1] "Pdxdc1"
[1] "Pdzph1"
[1] "Pea15a"
[1] "Pet100"
[1] "Pi4ka"
[1] "Pkia"
[1] "Podxl2"
[1] "Prr14"
[1] "Psd2"
[1] "Rab11fip4"
[1] "Rab2a"
[1] "Rab6b"
[1] "Rac1"
[1] "Rad23b"
[1] "Rbfox1"
[1] "Rbms3"
[1] "Rftn2"
[1] "Rgs7bp"
[1] "Rpl22"
[1] "Rpl30"
[1] "Rpl37a"
[1] "Rps14"
[1] "Rps6"
[1] "Rpsa"
[1] "Samd12"
[1] "Scarb2"
[1] "Scd1"
[1] "Selenot"
[1] "Sfi1"
[1] "Shisa6"
[1] "Ski"
[1] "Slc12a6"
[1] "Slc25a3"
[1] "Smarcc1"
[1] "Snhg14"
[1] "Snrk"
[1] "Snrpn"
[1] "Sntg1"
[1] "Snx21"
[1] "Spcs2"
[1] "Spop"
[1] "Spred2"
[1] "Stk3"
[1] "Stxbp5l"
[1] "Taf1"
[1] "Tafa1"
[1] "Tbc1d5"
[1] "Tbc1d9b"
[1] "Tef"
[1] "Tenm2"
[1] "Tenm4"
[1] "Thra"
[1] "Thrsp"
[1] "Timp2"
[1] "Tmem106b"
[1] "Tmem245"
[1] "Tmsb4x"
[1] "Tmx4"
[1] "Tnr"
[1] "Tom1"
[1] "Tsix"
[1] "Tspan13"
[1] "Ttc3"
[1] "Ube2l3"
[1] "Ube2r2"
[1] "Vps13d"
[1] "Vps35l"
[1] "Vwa8"
[1] "Wasf3"
[1] "Wdr26"
[1] "Ywhae"
[1] "Zfp644"
[1] "Zwint"
[1] "Nap1l5"
[1] "Ahi1"
[1] "Nrgn"
[1] "Kcnq3"
[1] "Hap1"
[1] "Calm2"
[1] "Slc24a3"
[1] "Ncald"
[1] "Map1b"
[1] "6330403K07Rik"
[1] "Vsnl1"
[1] "4930447C04Rik"
[1] "Slc8a1"
[1] "Prkce"
[1] "Prkacb"
[1] "Gabrg3"
[1] "Efna5"
[1] "Npas2"
[1] "Agbl4"
[1] "Myo16"
[1] "Zfhx4"
[1] "Antxr1"
[1] "Cacna1d"
[1] "Atp2b2"
[1] "Adamts20"
[1] "Med12l"
[1] "Lrrc7"
[1] "Kcnq1ot1"
[1] "6030443J06Rik"
[1] "Rbfox2"
[1] "Gm33680"
[1] "Fgf12"
[1] "Eif2s3y"
[1] "A230057D06Rik"
[1] "Mbp"
[1] "Snhg11"
[1] "Nrg3"
[1] "Lrrtm4"
[1] "Lingo2"
[1] "Cntn5"
[1] "Sgcz"
[1] "Cntnap2"
[1] "Syt1"
[1] "Opcml"
[1] "Meg3"
[1] "March1"
[1] "Spock1"
[1] "Tenm1"
[1] "Cdh18"
[1] "Cntnap5a"
[1] "Unc5d"
[1] "Lrfn5"
[1] "Anks1b"
[1] "Rims1"
[1] "Grm5"
[1] "Usp29"
[1] "Xkr4"
[1] "A230006K03Rik"
[1] "Gm26871"
[1] "Cacna2d1"
[1] "Prkg1"
[1] "Brinp1"
[1] "Rian"
[1] "Grin1"
[1] "Celf4"
[1] "Atp1a3"
[1] "Ppfia2"
[1] "Galntl6"
[1] "Scg2"
[1] "Unc5c"
[1] "Tmem59l"
[1] "Hmgcs1"
[1] "Zswim6"
[1] "Sept4"
[1] "Irak2"
[1] "Ddit4"
[1] "Arhgap31"
[1] "Zbtb16"
[1] "Anln"
[1] "Dab1"
[1] "Tmem100"
[1] "B2m"
[1] "Glmp"
[1] "Avp"
[1] "Resp18"
[1] "Oxt"
[1] "Stmn1"
[1] "Stmn3"
[1] "Bc1"
[1] "Bex2"
[1] "Tmsb10"
[1] "Ywhah"
[1] "Gm35188"
[1] "Gm26917"
[1] "Pcp4"
[1] "Uchl1"
[1] "Bex3"
[1] "Pgrmc1"
[1] "Atpif1"
[1] "Hsp90aa1"
[1] "1700030F04Rik"
[1] "Rpl22l1"
[1] "5330438D12Rik"
[1] "Fkbp3"
[1] "Plp1"
[1] "Sgcd"
[1] "Gm47283"
[1] "Snap47"
[1] "Rtl8a"
[1] "Ssbp4"
[1] "Gm15738"
[1] "Mtch1"
[1] "Mrfap1"
[1] "Syn3"
[1] "Aldh1a1"
[1] "Nrp1"
[1] "Tmem229a"
[1] "Pou3f3"
[1] "Setbp1"
[1] "Kmt2a"
[1] "Aff3"
[1] "Hdac9"
[1] "Ncoa2"
[1] "Gli2"
[1] "Herc1"
[1] "Arid1b"
[1] "Prdm16"
[1] "Ldb2"
[1] "Nfkb1"
[1] "Ssbp3"
[1] "Zfp148"
[1] "Mdm4"
[1] "Bptf"
[1] "Bach2"
[1] "Rb1"
[1] "Rreb1"
[1] "Ppp1r12b"
[1] "Dnmt3a"
[1] "Gria3"
[1] "Gabra1"
[1] "Maged1"
[1] "Purb"
[1] "Chgb"
[1] "Dnm1"
[1] "Bin1"
[1] "Npm1"
[1] "Nr2f2"
[1] "Mfn1"
[1] "Mfn2"
[1] "Opa1"
[1] "Dnm1l"
[1] "Mff"
[1] "Ppargc1a"
[1] "Ppargc1b"
[1] "Tfam"
[1] "Sod2"
[1] "Prdx3"
[1] "Slc25a1"
[1] "Slc25a4"
[1] "Slc25a5"
[1] "Uqcrc1"
[1] "Uqcrc2"
[1] "Cox4i1"
[1] "Cox4i2"
[1] "Atp5a1"
[1] "Atp5b"
[1] "Bak1"
[1] "Bax"
[1] "Bcl2"
[1] "Bcl2l1"
[1] "Bnip3"
[1] "Bnip3l"
[1] "Casp9"
[1] "Cybb"
[1] "Gpx1"
[1] "Gpx4"
[1] "Mapk14"
[1] "Nfe2l2"
[1] "Nox4"
[1] "Polg"
[1] "Polg2"
[1] "Pink1"
[1] "Aifm1"
[1] "Ogg1"
[1] "Mutyh"
[1] "Sod1"
[1] "Sod3"
[1] "Ucp1"
[1] "Ucp2"
[1] "Ucp3"
[1] "Klb"
[1] "Bdh1"
[1] "Bdh2"
[1] "Hmgcs2"
[1] "Slc16a1"
[1] "Slc16a7"
[1] "Slc2a1"
[1] "Slc2a3"
[1] "Gck"
[1] "Pfkp"
[1] "Pkm"
[1] "Pdha1"
[1] "Pdk1"
[1] "Pdk2"
[1] "Pdk3"
[1] "Pdk4"
[1] "Acox1"
[1] "Cpt1a"
[1] "Cpt1b"
[1] "Cpt1c"
[1] "Cpt2"
[1] "Acsl1"
[1] "Acsl3"
[1] "Acsl4"
[1] "Acsl5"
[1] "Acsl6"
[1] "Acly"
[1] "Fasn"
[1] "Scd2"
[1] "Acaa2"
[1] "Eno1"
[1] "Hadhb"
[1] "Pygb"
[[1]]


[[2]]


[[3]]


[[4]]


[[5]]


[[6]]


[[7]]


[[8]]


[[9]]


[[10]]


[[11]]


[[12]]


[[13]]


[[14]]


[[15]]


[[16]]


[[17]]


[[18]]


[[19]]


[[20]]


[[21]]


[[22]]


[[23]]


[[24]]


[[25]]


[[26]]


[[27]]


[[28]]


[[29]]


[[30]]


[[31]]


[[32]]


[[33]]


[[34]]


[[35]]


[[36]]


[[37]]


[[38]]


[[39]]


[[40]]


[[41]]


[[42]]


[[43]]


[[44]]


[[45]]


[[46]]


[[47]]


[[48]]


[[49]]


[[50]]


[[51]]


[[52]]


[[53]]


[[54]]


[[55]]


[[56]]


[[57]]


[[58]]


[[59]]


[[60]]


[[61]]


[[62]]


[[63]]


[[64]]


[[65]]


[[66]]


[[67]]


[[68]]


[[69]]


[[70]]


[[71]]


[[72]]


[[73]]


[[74]]


[[75]]


[[76]]


[[77]]


[[78]]


[[79]]


[[80]]


[[81]]


[[82]]


[[83]]


[[84]]


[[85]]


[[86]]


[[87]]


[[88]]


[[89]]


[[90]]


[[91]]


[[92]]


[[93]]


[[94]]


[[95]]


[[96]]


[[97]]


[[98]]


[[99]]


[[100]]


[[101]]


[[102]]


[[103]]


[[104]]


[[105]]


[[106]]


[[107]]


[[108]]


[[109]]


[[110]]


[[111]]


[[112]]


[[113]]


[[114]]


[[115]]


[[116]]


[[117]]


[[118]]


[[119]]


[[120]]


[[121]]


[[122]]


[[123]]


[[124]]


[[125]]


[[126]]


[[127]]


[[128]]


[[129]]


[[130]]


[[131]]


[[132]]


[[133]]


[[134]]


[[135]]


[[136]]


[[137]]


[[138]]


[[139]]


[[140]]


[[141]]


[[142]]


[[143]]


[[144]]


[[145]]


[[146]]


[[147]]


[[148]]


[[149]]


[[150]]


[[151]]


[[152]]


[[153]]


[[154]]


[[155]]


[[156]]


[[157]]


[[158]]


[[159]]


[[160]]


[[161]]


[[162]]


[[163]]


[[164]]


[[165]]


[[166]]


[[167]]


[[168]]


[[169]]


[[170]]


[[171]]


[[172]]


[[173]]


[[174]]


[[175]]


[[176]]


[[177]]


[[178]]


[[179]]


[[180]]


[[181]]


[[182]]


[[183]]


[[184]]


[[185]]


[[186]]


[[187]]


[[188]]


[[189]]


[[190]]


[[191]]


[[192]]


[[193]]


[[194]]


[[195]]


[[196]]


[[197]]


[[198]]


[[199]]


[[200]]


[[201]]


[[202]]


[[203]]


[[204]]


[[205]]


[[206]]


[[207]]


[[208]]


[[209]]


[[210]]


[[211]]


[[212]]


[[213]]


[[214]]


[[215]]


[[216]]


[[217]]


[[218]]


[[219]]


[[220]]


[[221]]


[[222]]


[[223]]


[[224]]


[[225]]


[[226]]


[[227]]


[[228]]


[[229]]


[[230]]


[[231]]


[[232]]


[[233]]


[[234]]


[[235]]


[[236]]


[[237]]


[[238]]


[[239]]


[[240]]


[[241]]


[[242]]


[[243]]


[[244]]


[[245]]


[[246]]


[[247]]


[[248]]


[[249]]


[[250]]


[[251]]


[[252]]


[[253]]


[[254]]


[[255]]


[[256]]


[[257]]


[[258]]


[[259]]


[[260]]


[[261]]


[[262]]


[[263]]


[[264]]


[[265]]


[[266]]


[[267]]


[[268]]


[[269]]


[[270]]


[[271]]


[[272]]


[[273]]


[[274]]


[[275]]


[[276]]


[[277]]


[[278]]


[[279]]


[[280]]


[[281]]


[[282]]


[[283]]


[[284]]


[[285]]


[[286]]


[[287]]


[[288]]


[[289]]


[[290]]


[[291]]


[[292]]


[[293]]


[[294]]


[[295]]


[[296]]


[[297]]


[[298]]


[[299]]


[[300]]


[[301]]


[[302]]


[[303]]


[[304]]


[[305]]


[[306]]


[[307]]


[[308]]


[[309]]


[[310]]


[[311]]


[[312]]


[[313]]


[[314]]


[[315]]


[[316]]


[[317]]


[[318]]


[[319]]


[[320]]


[[321]]


[[322]]


[[323]]


[[324]]


[[325]]


[[326]]


[[327]]


[[328]]


[[329]]


[[330]]


[[331]]


[[332]]


[[333]]


[[334]]


[[335]]


[[336]]


[[337]]


[[338]]


[[339]]


[[340]]


[[341]]


[[342]]


[[343]]


[[344]]


[[345]]


[[346]]


[[347]]


[[348]]


[[349]]


[[350]]


[[351]]


[[352]]


[[353]]


[[354]]


[[355]]


[[356]]


[[357]]


[[358]]


[[359]]


[[360]]


[[361]]


[[362]]


[[363]]


[[364]]


[[365]]


[[366]]


[[367]]


[[368]]


[[369]]


[[370]]


[[371]]


[[372]]


[[373]]


[[374]]


[[375]]


[[376]]


[[377]]


[[378]]


[[379]]


[[380]]


[[381]]


[[382]]


[[383]]


[[384]]


[[385]]


[[386]]


[[387]]


[[388]]


[[389]]


[[390]]


[[391]]


[[392]]


[[393]]


[[394]]


[[395]]


[[396]]


[[397]]


[[398]]


[[399]]


[[400]]


[[401]]


[[402]]


[[403]]


[[404]]


[[405]]


[[406]]


[[407]]


[[408]]


[[409]]


[[410]]


[[411]]


[[412]]


[[413]]


[[414]]


[[415]]


[[416]]


[[417]]


[[418]]


[[419]]


[[420]]


[[421]]


[[422]]


[[423]]


[[424]]


[[425]]


[[426]]


[[427]]


[[428]]


[[429]]


[[430]]


[[431]]


[[432]]


[[433]]


[[434]]


[[435]]


[[436]]


[[437]]


[[438]]


[[439]]


[[440]]


[[441]]


[[442]]


[[443]]


[[444]]


[[445]]


[[446]]


[[447]]


[[448]]


[[449]]


[[450]]


[[451]]


[[452]]


[[453]]


[[454]]


[[455]]


[[456]]


[[457]]


[[458]]


[[459]]


[[460]]


[[461]]


[[462]]


[[463]]


[[464]]


[[465]]


[[466]]


[[467]]


[[468]]


[[469]]


[[470]]


[[471]]


[[472]]


[[473]]


[[474]]


[[475]]


[[476]]


[[477]]


[[478]]


[[479]]


[[480]]


[[481]]


[[482]]


[[483]]


[[484]]


[[485]]


[[486]]


[[487]]


[[488]]


[[489]]


[[490]]


[[491]]


[[492]]


[[493]]


[[494]]


[[495]]


[[496]]


[[497]]


[[498]]


[[499]]


[[500]]


[[501]]


[[502]]


[[503]]


[[504]]


[[505]]


[[506]]


[[507]]


[[508]]


[[509]]


[[510]]


[[511]]


[[512]]


[[513]]


[[514]]


[[515]]


[[516]]


[[517]]


[[518]]


[[519]]


[[520]]


[[521]]


[[522]]


[[523]]


[[524]]


[[525]]


[[526]]


[[527]]


[[528]]


[[529]]


[[530]]


[[531]]


[[532]]


[[533]]


[[534]]


[[535]]


[[536]]


[[537]]


[[538]]


[[539]]


[[540]]


[[541]]


[[542]]


[[543]]


[[544]]


[[545]]


[[546]]


[[547]]


[[548]]


[[549]]

Code
target <- "csds"
geneLogAverage <- rowMeans(GetAssayData(subset(srt, idents = target), "data", "RNA"))
all_markers_genes$logA <- geneLogAverage[all_markers_genes$gene]


plt_genes <- all_markers_genes %>%
  filter(cluster == target) %>%
  mutate(gene = if_else(condition = (avg_log2FC >= 0.1 | avg_log2FC <= -0.1) & (pct_diff >= 0.02 | pct_diff <= -0.02),
    gene, ""
  ))

subselected_genes <- c(
  "Insr", "Meis1", "Igf1r", "Nrf1", "Prlr", "Camk1d", "Lars2", "Cacna2d3", # 0 ARC
  "Dcn", "Ptgds", "Nupr1", "Igfbp2", "Nrarp", "Ctnna2", "Ldlr", "Mmp14", # 1 LHA
  "Nkx6-2", "Cirbp", "Selenop", # 2 MnPO
  "Foxg1", "Crym", "Sema3c", "Meis2", "Dbp", # 3 POA
  "Egr1", "Ttr", "Btg2", "Mbnl3", "Pgf", "Irs4", "Gpr101", "Nr3c2", "Agtr1", # 4 PVN
  "Rfx4", "Dbx2", "Prokr2", "Cebpb", "Zic1", "Zic2", "Zic5", "Ccn1", "Gata4", "Klf4", "Klf10", # 5 SCN
  "Tbx3", "Fis1", "Ndn", "Psmc5", "Drap1", "Pcsk1n", "Rtn1", # 6 VMH
  "Emx2", "Sgip1", "Myoc", "Hivep3", "Dcc", "Ralyl", "Ltbp1", "Egfem1", # 7 VPH
  "Klf4", "Atf3", "Nrg1", "Cdk8", "Grpr", "Qrfpr", "Hcrtr1", "Hcrtr2", "Tacr1", "Trhr", "Tshr",
  "Gfap", "Fgf1", "Fgfr3", "Hepacam", "Hif1", "Htra1", "Lxn", "Ndrg2", "Ntn1", "Nfia", "Slit2", "Aqp4", "S100a1", "S100a6", "S100b", "Slc1a2", "Slc1a3", "Slc38a1", "Vegfa", "Fos", "Fosb", "Jun", "Junb", "Jund", "Ier2", "Socs3", "Pde10a", "Fbln5", "Otp", "Nr4a1", "Six6", "Emx2", "Myt1l", "Adcyap1r1", "Ghr", "Ntrk2", "Npy1r", "Gria1", "Gria2", "Grin2b", "Grin3a", "Grm3", "Grm7", "Gabrb1", "Gabbr1", "Gabbr2", "Rfx3", "Nr5a1", "Nkx2-1", "Otx2", "Bclaf1", "Foxo3", "Dlx1", "Lrrc6", "Peg3", "Elavl2", "Isl1", "Zfp36", "Otx1", "Pitx2"
)

plt_genes_const <- all_markers_genes %>%
  filter(cluster == target) %>%
  mutate(gene = if_else(condition = gene %in% subselected_genes,
    gene, ""
  ))

my_pal <- function(range = c(1, 6)) {
  force(range)
  function(x) scales::rescale(x, to = range, from = c(0, 1))
}

plt_genes %>%
  ggplot(
    .,
    aes(
      x = logA,
      y = avg_log2FC,
      label = gene,
      size = pct.1
    )
  ) +
  geom_point(alpha = 0.7, colour = if_else(condition = (plt_genes$avg_log2FC >= 0.1 | plt_genes$avg_log2FC <= -0.1) & (plt_genes$pct_diff >= 0.02 | plt_genes$pct_diff <= -0.02), "orangered", "grey50")) +
  continuous_scale(
    aesthetics = c("size", "point.size"), scale_name = "size",
    palette = my_pal(c(2, 9)),
    guide = guide_legend(override.aes = list(label = "")) # hide "a" in legend
  ) +
  ggrepel::geom_text_repel(
    aes(point.size = pct.1), # data point size
    size = 6, # font size in the text labels
    point.padding = 0, # additional padding around each point
    min.segment.length = 0, # draw all line segments
    max.time = 2, max.iter = 1e6, # stop after 1 second, or after 100,000 iterations
    seed = reseed,
    max.overlaps = Inf,
    box.padding = 0.5
  ) +
  theme_light()

Code
plt_genes %>%
  ggplot(
    .,
    aes(
      x = avg_log2FC,
      y = 1 / p_val_adj,
      col = logA,
      label = gene,
      size = pct.1
    )
  ) +
  scale_y_log10() +
  geom_point(alpha = 0.7, colour = if_else(condition = plt_genes$avg_log2FC < 0.1 & plt_genes$avg_log2FC > -0.1, "grey50", "orangered")) +
  continuous_scale(
    aesthetics = c("size", "point.size"), scale_name = "size",
    palette = my_pal(c(2, 9)),
    guide = guide_legend(override.aes = list(label = "")) # hide "a" in legend
  ) +
  ggrepel::geom_text_repel(
    aes(point.size = pct.1), # data point size
    size = 6, # font size in the text labels
    point.padding = 0, # additional padding around each point
    min.segment.length = 0, # draw all line segments
    max.time = 2, max.iter = 1e6, # stop after 1 second, or after 100,000 iterations
    seed = reseed,
    max.overlaps = Inf,
    box.padding = 0.5
  ) +
  theme_light()

Code
plt_genes %>%
  ggplot(
    .,
    aes(
      x = avg_log2FC,
      y = pct_diff,
      col = -log10(p_val_adj),
      label = gene,
      size = pct.1
    )
  ) +
  xlim(c(-1., 1.)) +
  ylim(c(-0.2, 0.2)) +
  geom_vline(
    xintercept = c(-0.1, 0.1),
    linetype = "dashed",
    colour = "grey80",
    size = 0.3
  ) +
  geom_hline(
    yintercept = c(-0.02, 0.02),
    linetype = "dashed",
    colour = "grey80",
    size = 0.3
  ) +
  geom_vline(
    xintercept = 0,
    linetype = "solid",
    colour = "black",
    size = 0.5
  ) +
  geom_hline(
    yintercept = 0,
    linetype = "solid",
    colour = "black",
    size = 0.5
  ) +
  geom_point(alpha = 0.7, colour = if_else(condition = (plt_genes$avg_log2FC >= 0.1 | plt_genes$avg_log2FC <= -0.1) & (plt_genes$pct_diff >= 0.02 | plt_genes$pct_diff <= -0.02), "orangered", "grey50")) +
  continuous_scale(
    aesthetics = c("size", "point.size"), scale_name = "size",
    palette = my_pal(c(2, 9)),
    guide = guide_legend(override.aes = list(label = "")) # hide "a" in legend
  ) +
  ggrepel::geom_text_repel(
    aes(point.size = pct.1), # data point size
    size = 6, # font size in the text labels
    point.padding = 0, # additional padding around each point
    min.segment.length = 0, # draw all line segments
    max.time = 2, max.iter = 1e6, # stop after 1 second, or after 100,000 iterations
    seed = reseed,
    max.overlaps = Inf,
    box.padding = 0.5
  ) +
  theme_classic()

Code
plt_genes_const %>%
  ggplot(
    .,
    aes(
      x = avg_log2FC,
      y = pct_diff,
      col = -log10(p_val_adj),
      label = gene,
      size = pct.1
    )
  ) +
  xlim(c(-0.15, 0.15)) +
  ylim(c(-0.025, 0.025)) +
  geom_vline(
    xintercept = c(-0.1, 0.1),
    linetype = "dashed",
    colour = "grey80",
    size = 0.3
  ) +
  geom_hline(
    yintercept = c(-0.02, 0.02),
    linetype = "dashed",
    colour = "grey80",
    size = 0.3
  ) +
  geom_vline(
    xintercept = 0,
    linetype = "solid",
    colour = "black",
    size = 0.5
  ) +
  geom_hline(
    yintercept = 0,
    linetype = "solid",
    colour = "black",
    size = 0.5
  ) +
  geom_point(alpha = 0.7, colour = if_else(condition = (plt_genes$avg_log2FC < 0.1 & plt_genes$avg_log2FC > -0.1) &
    (plt_genes$pct_diff < 0.02 & plt_genes$pct_diff > -0.02), "darkgreen", "grey50")) +
  continuous_scale(
    aesthetics = c("size", "point.size"), scale_name = "size",
    palette = my_pal(c(2, 9)),
    guide = guide_legend(override.aes = list(label = "")) # hide "a" in legend
  ) +
  ggrepel::geom_text_repel(
    aes(point.size = pct.1), # data point size
    size = 6, # font size in the text labels
    point.padding = 0, # additional padding around each point
    min.segment.length = 0, # draw all line segments
    max.time = 2, max.iter = 1e6, # stop after 1 second, or after 100,000 iterations
    seed = reseed,
    max.overlaps = Inf,
    box.padding = 0.5
  ) +
  theme_classic()

Code
plt_genes_const %>%
  ggplot(
    .,
    aes(
      x = pct.1,
      y = pct_diff,
      col = -log10(p_val_adj),
      label = gene,
      size = avg_log2FC
    )
  ) +
  geom_vline(
    xintercept = 0,
    linetype = "solid",
    colour = "black",
    size = 0.5
  ) +
  geom_hline(
    yintercept = 0,
    linetype = "solid",
    colour = "black",
    size = 0.5
  ) +
  geom_point(alpha = 0.7, colour = if_else(condition = (plt_genes$avg_log2FC < 0.1 & plt_genes$avg_log2FC > -0.1) &
    (plt_genes$pct_diff < 0.02 & plt_genes$pct_diff > -0.02), "darkgreen", "grey50")) +
  continuous_scale(
    aesthetics = c("size", "point.size"), scale_name = "size",
    palette = my_pal(c(2, 9)),
    guide = guide_legend(override.aes = list(label = "")) # hide "a" in legend
  ) +
  ggrepel::geom_text_repel(
    aes(point.size = avg_log2FC), # data point size
    size = 6, # font size in the text labels
    point.padding = 0, # additional padding around each point
    min.segment.length = 0, # draw all line segments
    max.time = 2, max.iter = 1e6, # stop after 1 second, or after 100,000 iterations
    seed = reseed,
    max.overlaps = Inf,
    box.padding = 0.5
  ) +
  theme_light()

Session information

Code
sI <- sessioninfo::session_info()
sI$loadedOnly <- NULL
print(sI, locale = FALSE)
─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.2.2 (2022-10-31)
 os       Ubuntu 22.04.2 LTS
 system   x86_64, linux-gnu
 ui       X11
 language en_US:en
 collate  en_US.UTF-8
 ctype    en_US.UTF-8
 tz       Etc/UTC
 date     2023-07-26
 pandoc   2.19.2 @ /opt/python/3.8.8/bin/ (via rmarkdown)

─ Packages ───────────────────────────────────────────────────────────────────
 package              * version     date (UTC) lib source
 abind                  1.4-5       2016-07-21 [1] RSPM (R 4.2.0)
 anndata              * 0.7.5.6     2023-03-17 [1] RSPM (R 4.2.0)
 assertthat             0.2.1       2019-03-21 [1] RSPM (R 4.2.0)
 base64enc              0.1-3       2015-07-28 [1] RSPM (R 4.2.0)
 bayestestR             0.13.1      2023-04-30 [1] https://easystats.r-universe.dev (R 4.2.2)
 beeswarm               0.4.0       2021-06-01 [1] RSPM (R 4.2.0)
 Biobase              * 2.58.0      2022-11-01 [1] RSPM (R 4.2.2)
 BiocGenerics         * 0.44.0      2022-11-01 [1] RSPM (R 4.2.2)
 BiocManager            1.30.20     2023-02-24 [1] RSPM (R 4.2.0)
 bit                    4.0.5       2022-11-15 [1] RSPM (R 4.2.0)
 bit64                  4.0.5       2020-08-30 [1] RSPM (R 4.2.0)
 bitops                 1.0-7       2021-04-24 [1] RSPM (R 4.2.0)
 boot                   1.3-28.1    2022-11-22 [1] RSPM (R 4.2.0)
 Cairo                  1.6-0       2022-07-05 [1] RSPM (R 4.2.2)
 circlize               0.4.15      2022-05-10 [1] RSPM (R 4.2.0)
 cli                    3.6.1       2023-03-23 [1] RSPM (R 4.2.0)
 cluster                2.1.4       2022-08-22 [1] RSPM (R 4.2.0)
 coda                   0.19-4      2020-09-30 [1] RSPM (R 4.2.0)
 codetools              0.2-19      2023-02-01 [1] RSPM (R 4.2.0)
 colorspace             2.1-0       2023-01-23 [1] RSPM (R 4.2.0)
 concaveman             1.1.0       2020-05-11 [1] RSPM (R 4.2.0)
 correlation            0.8.4       2023-04-30 [1] Github (easystats/correlation@3d5cd1e)
 cowplot              * 1.1.1       2020-12-30 [1] RSPM (R 4.2.0)
 crayon                 1.5.2       2022-09-29 [1] RSPM (R 4.2.0)
 dabestr              * 0.3.0       2023-04-30 [1] Github (ACCLAB/dabestr@8775899)
 data.table             1.14.8      2023-02-17 [1] RSPM (R 4.2.0)
 datawizard             0.7.1       2023-04-03 [1] RSPM (R 4.2.0)
 DelayedArray           0.24.0      2022-11-01 [1] RSPM (R 4.2.2)
 deldir                 1.0-6       2021-10-23 [1] RSPM (R 4.2.0)
 digest                 0.6.31      2022-12-11 [1] RSPM (R 4.2.0)
 dplyr                * 1.1.2       2023-04-20 [1] RSPM (R 4.2.2)
 ellipsis               0.3.2       2021-04-29 [1] RSPM (R 4.2.0)
 emmeans                1.8.5       2023-03-08 [1] RSPM (R 4.2.0)
 entropy                1.3.1       2021-10-02 [1] RSPM (R 4.2.0)
 estimability           1.4.1       2022-08-05 [1] RSPM (R 4.2.0)
 evaluate               0.20        2023-01-17 [1] RSPM (R 4.2.0)
 fansi                  1.0.4       2023-01-22 [1] RSPM (R 4.2.0)
 farver                 2.1.1       2022-07-06 [1] RSPM (R 4.2.0)
 fastmap                1.1.1       2023-02-24 [1] RSPM (R 4.2.0)
 fitdistrplus           1.1-11      2023-04-25 [1] RSPM (R 4.2.2)
 forcats              * 1.0.0       2023-01-29 [1] RSPM (R 4.2.0)
 future               * 1.32.0      2023-03-07 [1] RSPM (R 4.2.0)
 future.apply           1.10.0      2022-11-05 [1] RSPM (R 4.2.0)
 generics               0.1.3       2022-07-05 [1] RSPM (R 4.2.0)
 GenomeInfoDb         * 1.34.9      2023-02-02 [1] RSPM (R 4.2.2)
 GenomeInfoDbData       1.2.9       2023-04-30 [1] RSPM (R 4.2.2)
 GenomicRanges        * 1.50.2      2022-12-16 [1] RSPM (R 4.2.2)
 ggbeeswarm             0.7.2       2023-04-30 [1] Github (eclarke/ggbeeswarm@3cf58a9)
 ggforce                0.4.1.9000  2023-04-30 [1] Github (thomasp85/ggforce@9be635c)
 ggmin                  0.0.0.9000  2023-04-30 [1] Github (sjessa/ggmin@8ada274)
 ggplot2              * 3.4.2       2023-04-03 [1] RSPM (R 4.2.0)
 ggprism                1.0.4       2023-04-30 [1] Github (csdaw/ggprism@0e411f4)
 ggrastr                1.0.1       2023-04-30 [1] Github (VPetukhov/ggrastr@7aed9af)
 ggrepel                0.9.2.9999  2023-04-30 [1] Github (slowkow/ggrepel@fe3b5c3)
 ggridges               0.5.4       2022-09-26 [1] RSPM (R 4.2.0)
 ggstatsplot          * 0.11.1.9000 2023-04-30 [1] Github (IndrajeetPatil/ggstatsplot@befe812)
 GlobalOptions          0.1.2       2020-06-10 [1] RSPM (R 4.2.0)
 globals                0.16.2      2022-11-21 [1] RSPM (R 4.2.0)
 glue                   1.6.2       2022-02-24 [1] RSPM (R 4.2.0)
 goftest                1.2-3       2021-10-07 [1] RSPM (R 4.2.0)
 gridExtra              2.3         2017-09-09 [1] RSPM (R 4.2.0)
 gtable                 0.3.3       2023-03-21 [1] RSPM (R 4.2.0)
 hdf5r                  1.3.8       2023-01-21 [1] RSPM (R 4.2.2)
 here                 * 1.0.1       2020-12-13 [1] RSPM (R 4.2.0)
 hexbin                 1.28.3      2023-03-21 [1] RSPM (R 4.2.0)
 hms                    1.1.3       2023-03-21 [1] RSPM (R 4.2.0)
 htmltools              0.5.5       2023-03-23 [1] RSPM (R 4.2.0)
 htmlwidgets            1.6.2       2023-03-17 [1] RSPM (R 4.2.0)
 httpuv                 1.6.9       2023-02-14 [1] RSPM (R 4.2.0)
 httr                   1.4.5       2023-02-24 [1] RSPM (R 4.2.0)
 ica                    1.0-3       2022-07-08 [1] RSPM (R 4.2.0)
 igraph                 1.4.1       2023-02-24 [1] RSPM (R 4.2.0)
 insight                0.19.1      2023-03-18 [1] RSPM (R 4.2.0)
 IRanges              * 2.32.0      2022-11-01 [1] RSPM (R 4.2.2)
 irlba                  2.3.5.1     2022-10-03 [1] RSPM (R 4.2.0)
 janitor                2.2.0.9000  2023-04-30 [1] Github (sfirke/janitor@d64c8bb)
 jsonlite               1.8.4       2022-12-06 [1] RSPM (R 4.2.0)
 KernSmooth             2.23-20     2021-05-03 [1] RSPM (R 4.2.0)
 knitr                  1.42        2023-01-25 [1] RSPM (R 4.2.0)
 labeling               0.4.2       2020-10-20 [1] RSPM (R 4.2.0)
 later                  1.3.0       2021-08-18 [1] RSPM (R 4.2.0)
 lattice                0.21-8      2023-04-05 [1] RSPM (R 4.2.0)
 lazyeval               0.2.2       2019-03-15 [1] RSPM (R 4.2.0)
 leiden                 0.4.3       2022-09-10 [1] RSPM (R 4.2.0)
 lifecycle              1.0.3       2022-10-07 [1] RSPM (R 4.2.0)
 listenv                0.9.0       2022-12-16 [1] RSPM (R 4.2.0)
 lmtest                 0.9-40      2022-03-21 [1] RSPM (R 4.2.0)
 lubridate            * 1.9.2       2023-02-10 [1] RSPM (R 4.2.0)
 magrittr             * 2.0.3       2022-03-30 [1] RSPM (R 4.2.0)
 MASS                   7.3-58.1    2022-08-03 [1] CRAN (R 4.2.2)
 Matrix                 1.5-4       2023-04-04 [1] RSPM (R 4.2.0)
 MatrixGenerics       * 1.10.0      2022-11-01 [1] RSPM (R 4.2.2)
 matrixStats          * 0.63.0      2022-11-18 [1] RSPM (R 4.2.0)
 mime                   0.12        2021-09-28 [1] RSPM (R 4.2.0)
 miniUI                 0.1.1.1     2018-05-18 [1] RSPM (R 4.2.0)
 multcomp               1.4-23      2023-03-09 [1] RSPM (R 4.2.0)
 munsell                0.5.0       2018-06-12 [1] RSPM (R 4.2.0)
 mvtnorm                1.1-3       2021-10-08 [1] RSPM (R 4.2.0)
 nlme                   3.1-162     2023-01-31 [1] RSPM (R 4.2.0)
 paletteer              1.5.0       2022-10-19 [1] RSPM (R 4.2.0)
 parallelly             1.35.0      2023-03-23 [1] RSPM (R 4.2.0)
 parameters             0.20.3      2023-04-05 [1] RSPM (R 4.2.0)
 patchwork            * 1.1.2.9000  2023-04-30 [1] Github (thomasp85/patchwork@c14c960)
 pbapply                1.7-0       2023-01-13 [1] RSPM (R 4.2.0)
 pillar                 1.9.0       2023-03-22 [1] RSPM (R 4.2.0)
 pkgconfig              2.0.3       2019-09-22 [1] RSPM (R 4.2.0)
 plotly                 4.10.1      2022-11-07 [1] RSPM (R 4.2.0)
 plyr                   1.8.8       2022-11-11 [1] RSPM (R 4.2.0)
 png                    0.1-8       2022-11-29 [1] RSPM (R 4.2.0)
 polyclip               1.10-4      2022-10-20 [1] RSPM (R 4.2.0)
 progressr              0.13.0      2023-01-10 [1] RSPM (R 4.2.0)
 promises               1.2.0.1     2021-02-11 [1] RSPM (R 4.2.0)
 purrr                * 1.0.1       2023-01-10 [1] RSPM (R 4.2.0)
 R.methodsS3            1.8.2       2022-06-13 [1] RSPM (R 4.2.0)
 R.oo                   1.25.0      2022-06-12 [1] RSPM (R 4.2.0)
 R.utils                2.12.2      2022-11-11 [1] RSPM (R 4.2.0)
 R6                     2.5.1       2021-08-19 [1] RSPM (R 4.2.0)
 RANN                   2.6.1       2019-01-08 [1] RSPM (R 4.2.0)
 RColorBrewer         * 1.1-3       2022-04-03 [1] RSPM (R 4.2.0)
 Rcpp                   1.0.10      2023-01-22 [1] RSPM (R 4.2.0)
 RcppAnnoy              0.0.20      2022-10-27 [1] RSPM (R 4.2.0)
 RCurl                  1.98-1.12   2023-03-27 [1] RSPM (R 4.2.0)
 readr                * 2.1.4       2023-02-10 [1] RSPM (R 4.2.0)
 rematch2               2.1.2       2020-05-01 [1] RSPM (R 4.2.0)
 remotes                2.4.2       2021-11-30 [1] RSPM (R 4.2.0)
 repr                   1.1.6       2023-01-26 [1] RSPM (R 4.2.0)
 reshape2               1.4.4       2020-04-09 [1] RSPM (R 4.2.0)
 reticulate           * 1.28-9000   2023-04-30 [1] Github (rstudio/reticulate@442c49f)
 rlang                  1.1.0       2023-03-14 [1] RSPM (R 4.2.0)
 rmarkdown              2.21        2023-03-26 [1] RSPM (R 4.2.0)
 ROCR                   1.0-11      2020-05-02 [1] RSPM (R 4.2.0)
 rprojroot              2.0.3       2022-04-02 [1] RSPM (R 4.2.0)
 rsvd                   1.0.5       2021-04-16 [1] RSPM (R 4.2.0)
 Rtsne                  0.16        2022-04-17 [1] RSPM (R 4.2.0)
 S4Vectors            * 0.36.2      2023-02-26 [1] RSPM (R 4.2.2)
 sandwich               3.0-2       2022-06-15 [1] RSPM (R 4.2.0)
 scales                 1.2.1       2022-08-20 [1] RSPM (R 4.2.0)
 scattermore            0.8         2022-02-14 [1] RSPM (R 4.2.0)
 scCustomize          * 1.1.1       2023-04-30 [1] Github (samuel-marsh/scCustomize@d08268d)
 sceasy               * 0.0.7       2023-04-30 [1] Github (cellgeni/sceasy@0cfc0e3)
 schex                * 1.12.0      2022-11-01 [1] RSPM (R 4.2.2)
 sctransform            0.3.5       2022-09-21 [1] RSPM (R 4.2.0)
 sessioninfo            1.2.2       2021-12-06 [1] RSPM (R 4.2.0)
 Seurat               * 4.3.0       2022-11-18 [1] RSPM (R 4.2.2)
 SeuratDisk           * 0.0.0.9020  2023-04-30 [1] Github (mojaveazure/seurat-disk@9b89970)
 SeuratObject         * 4.1.3       2022-11-07 [1] RSPM (R 4.2.0)
 SeuratWrappers       * 0.3.1       2023-04-30 [1] Github (satijalab/seurat-wrappers@d28512f)
 shape                  1.4.6       2021-05-19 [1] RSPM (R 4.2.0)
 shiny                * 1.7.4       2022-12-15 [1] RSPM (R 4.2.0)
 SingleCellExperiment * 1.20.1      2023-03-17 [1] RSPM (R 4.2.2)
 skimr                * 2.1.5       2023-04-30 [1] Github (ropensci/skimr@d5126aa)
 snakecase              0.11.0      2019-05-25 [1] RSPM (R 4.2.0)
 sp                     1.6-0       2023-01-19 [1] RSPM (R 4.2.0)
 spatstat.data          3.0-1       2023-03-12 [1] RSPM (R 4.2.0)
 spatstat.explore       3.1-0       2023-03-14 [1] RSPM (R 4.2.0)
 spatstat.geom          3.1-0       2023-03-12 [1] RSPM (R 4.2.0)
 spatstat.random        3.1-4       2023-03-13 [1] RSPM (R 4.2.0)
 spatstat.sparse        3.0-1       2023-03-12 [1] RSPM (R 4.2.0)
 spatstat.utils         3.0-2       2023-03-11 [1] RSPM (R 4.2.0)
 statsExpressions       1.5.0       2023-02-19 [1] RSPM (R 4.2.0)
 stringi                1.7.12      2023-01-11 [1] RSPM (R 4.2.0)
 stringr              * 1.5.0       2022-12-02 [1] RSPM (R 4.2.0)
 SummarizedExperiment * 1.28.0      2022-11-01 [1] RSPM (R 4.2.2)
 survival               3.5-5       2023-03-12 [1] RSPM (R 4.2.0)
 tensor                 1.5         2012-05-05 [1] RSPM (R 4.2.0)
 TH.data                1.1-1       2022-04-26 [1] RSPM (R 4.2.0)
 tibble               * 3.2.1       2023-03-20 [1] RSPM (R 4.2.0)
 tidyr                * 1.3.0       2023-01-24 [1] RSPM (R 4.2.0)
 tidyselect             1.2.0       2022-10-10 [1] RSPM (R 4.2.0)
 tidyverse            * 2.0.0.9000  2023-04-30 [1] Github (tidyverse/tidyverse@8ec2e1f)
 timechange             0.2.0       2023-01-11 [1] RSPM (R 4.2.0)
 tweenr                 2.0.2       2022-09-06 [1] RSPM (R 4.2.0)
 tzdb                   0.3.0       2022-03-28 [1] RSPM (R 4.2.0)
 utf8                   1.2.3       2023-01-31 [1] RSPM (R 4.2.0)
 uwot                   0.1.14      2022-08-22 [1] RSPM (R 4.2.0)
 vctrs                  0.6.2       2023-04-19 [1] RSPM (R 4.2.2)
 vipor                  0.4.5       2017-03-22 [1] RSPM (R 4.2.0)
 viridis              * 0.6.2       2021-10-13 [1] RSPM (R 4.2.0)
 viridisLite          * 0.4.1       2022-08-22 [1] RSPM (R 4.2.0)
 vroom                  1.6.1       2023-01-22 [1] RSPM (R 4.2.0)
 withr                  2.5.0       2022-03-03 [1] RSPM (R 4.2.0)
 xfun                   0.39        2023-04-20 [1] RSPM (R 4.2.2)
 xtable                 1.8-4       2019-04-21 [1] RSPM (R 4.2.0)
 XVector                0.38.0      2022-11-01 [1] RSPM (R 4.2.2)
 yaml                   2.3.7       2023-01-23 [1] RSPM (R 4.2.0)
 zeallot                0.1.0       2018-01-28 [1] RSPM (R 4.2.0)
 zlibbioc               1.44.0      2022-11-01 [1] RSPM (R 4.2.2)
 zoo                    1.8-12      2023-04-13 [1] RSPM (R 4.2.2)

 [1] /opt/R/4.2.2/lib/R/library

─ Python configuration ───────────────────────────────────────────────────────
 python:         /opt/python/3.8.8/bin/python
 libpython:      /opt/python/3.8.8/lib/libpython3.8.so
 pythonhome:     /opt/python/3.8.8:/opt/python/3.8.8
 version:        3.8.8 | packaged by conda-forge | (default, Feb 20 2021, 16:22:27)  [GCC 9.3.0]
 numpy:          /opt/python/3.8.8/lib/python3.8/site-packages/numpy
 numpy_version:  1.23.5
 scanpy:         /opt/python/3.8.8/lib/python3.8/site-packages/scanpy
 
 NOTE: Python version was forced by RETICULATE_PYTHON

──────────────────────────────────────────────────────────────────────────────