Starting from Version 1.2.0, escheR package supports
additional two data structures as input, including SpatialExperiment
and data.frame from base R. In addition,
escheR supports in-situ visualization of image-based
spatially resolved data, which will be the focus of future
development.
SingleCellExperimentSpatialExperiment inherits
SingleCellExperimentFollowing the same syntax, one can also visualize dimensionality
reduced embeddings of a SpatialExperiment object by
providing the argument dimred with a non-null value. Hence,
the first 2 columns of the corresponding reducedDim(spe)
assay will be used as the x-y coordinate of the plot, replacing
spatialCoords(spe).
library(escheR)
library(STexampleData)
library(scater)
library(scran)
spe <- Visium_humanDLPFC() |>
logNormCounts()
spe <- spe[, spe$in_tissue == 1]
spe <- spe[, !is.na(spe$ground_truth)]
top.gene <- getTopHVGs(spe, n=500)
set.seed(100) # See below.
spe <- runPCA(spe, subset_row = top.gene)
make_escheR(
spe,
dimred = "PCA"
) |>
add_fill(var = "ground_truth") +
theme_minimal()spe$counts_MOBP <- counts(spe)[which(rowData(spe)$gene_name=="MOBP"),]
spe$ground_truth <- factor(spe$ground_truth)
# Point Binning version
make_escheR(
spe,
dimred = "PCA"
) |>
add_ground_bin(
var = "ground_truth"
) |>
add_fill_bin(
var = "counts_MOBP"
) +
# Customize aesthetics
scale_fill_gradient(low = "white", high = "black", name = "MOBP Count")+
scale_color_discrete(name = "Spatial Domains") +
theme_minimal()Note 1: The strategy of binning to avoid overplotting is previously proposed in
schex. While we provide an implementation inescheR, we would caution our users that the binning strategy could lead to intermixing of cluster memberships. In our implementation, the majority membership of the data points belonging to a bin is selected as the label of the bin. Users should use the binning strategy under their own discretion, and interpret the visualization carefully.
Note 2:
add_fill_bin()shoudl be applied afteradd_ground_bin()for the better visualization outcome.
SpatialExperiment ObjectTo demonstrate the principle that escheR can be used to
visualize image-based spatially-resolved data pending optimization, we
include two image-based spatially resolved transcriptomics data
generated via seqFish platform and Slide-seq V2 platform respectively.
The two datasets have been previously curated in the STexampleData
package
library(STexampleData)
library(escheR)
spe_seqFISH <- seqFISH_mouseEmbryo()
make_escheR(spe_seqFISH) |>
add_fill(var = "embryo")NOTE: trimming down the
colData(spe)before piping into make-escheR could reduce the computation time to make the plots, specifically whencolData(spe)contains extremely large number of irrelavent features/columns.
We aim to provide accessibility to all users regardless of their
programming background and preferred single-cell analysis pipelines.
Nevertheless , with limited resource, our sustaining efforts will
prioritize towards the maintenance of the established functionality and
the optimization for image-based spatially resolved data. We regret we
are not be able to provide seamless interface to other R pipelines such
as Seurat and Giotto in foreseeable
future.
Instead, we provide a generic function that works with a
data.frame object as input. For example, relevant features
in Suerat can be easily exported as a
data.frame object manually or via
tidyseurat[https://github.com/stemangiola/tidyseurat]. The exported
data frame can be pipe into escheR.
library(escheR)
library(Seurat)
pbmc_small <- SeuratObject::pbmc_small
pbmc_2pc <- pbmc_small@reductions$pca@cell.embeddings[,1:2]
pbmc_meta <- pbmc_small@meta.data
#> Call generic function for make_escheR.data.frame
make_escheR(
object = pbmc_meta,
.x = pbmc_2pc[,1],
.y = pbmc_2pc[,2]) |>
add_fill(var = "groups")utils::sessionInfo()
#> R version 4.5.0 Patched (2025-04-21 r88169)
#> Platform: aarch64-apple-darwin20
#> Running under: macOS Ventura 13.7.1
#>
#> Matrix products: default
#> BLAS: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRblas.0.dylib
#> LAPACK: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRlapack.dylib; LAPACK version 3.12.1
#>
#> locale:
#> [1] C/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
#>
#> time zone: America/New_York
#> tzcode source: internal
#>
#> attached base packages:
#> [1] stats4 stats graphics grDevices utils datasets methods
#> [8] base
#>
#> other attached packages:
#> [1] scran_1.37.0 scater_1.37.0
#> [3] scuttle_1.19.0 ggpubr_0.6.0
#> [5] STexampleData_1.17.0 SpatialExperiment_1.19.0
#> [7] SingleCellExperiment_1.31.0 SummarizedExperiment_1.39.0
#> [9] Biobase_2.69.0 GenomicRanges_1.61.0
#> [11] GenomeInfoDb_1.45.0 IRanges_2.43.0
#> [13] S4Vectors_0.47.0 MatrixGenerics_1.21.0
#> [15] matrixStats_1.5.0 ExperimentHub_2.99.0
#> [17] AnnotationHub_3.99.0 BiocFileCache_2.99.0
#> [19] dbplyr_2.5.0 BiocGenerics_0.55.0
#> [21] generics_0.1.3 escheR_1.9.0
#> [23] ggplot2_3.5.2 BiocStyle_2.37.0
#>
#> loaded via a namespace (and not attached):
#> [1] DBI_1.2.3 gridExtra_2.3 httr2_1.1.2
#> [4] rlang_1.1.6 magrittr_2.0.3 compiler_4.5.0
#> [7] RSQLite_2.3.9 png_0.1-8 vctrs_0.6.5
#> [10] pkgconfig_2.0.3 crayon_1.5.3 fastmap_1.2.0
#> [13] backports_1.5.0 magick_2.8.6 XVector_0.49.0
#> [16] labeling_0.4.3 rmarkdown_2.29 ggbeeswarm_0.7.2
#> [19] UCSC.utils_1.5.0 tinytex_0.57 purrr_1.0.4
#> [22] bit_4.6.0 bluster_1.19.0 xfun_0.52
#> [25] beachmat_2.25.0 cachem_1.1.0 jsonlite_2.0.0
#> [28] blob_1.2.4 DelayedArray_0.35.1 BiocParallel_1.43.0
#> [31] cluster_2.1.8.1 irlba_2.3.5.1 parallel_4.5.0
#> [34] broom_1.0.8 R6_2.6.1 bslib_0.9.0
#> [37] RColorBrewer_1.1-3 limma_3.65.0 car_3.1-3
#> [40] jquerylib_0.1.4 Rcpp_1.0.14 bookdown_0.43
#> [43] knitr_1.50 igraph_2.1.4 Matrix_1.7-3
#> [46] tidyselect_1.2.1 viridis_0.6.5 dichromat_2.0-0.1
#> [49] abind_1.4-8 yaml_2.3.10 codetools_0.2-20
#> [52] curl_6.2.2 lattice_0.22-7 tibble_3.2.1
#> [55] BumpyMatrix_1.17.0 withr_3.0.2 KEGGREST_1.49.0
#> [58] evaluate_1.0.3 Biostrings_2.77.0 pillar_1.10.2
#> [61] BiocManager_1.30.25 filelock_1.0.3 carData_3.0-5
#> [64] BiocVersion_3.22.0 scales_1.4.0 glue_1.8.0
#> [67] metapod_1.17.0 tools_4.5.0 hexbin_1.28.5
#> [70] BiocNeighbors_2.3.0 ScaledMatrix_1.17.0 locfit_1.5-9.12
#> [73] ggsignif_0.6.4 cowplot_1.1.3 grid_4.5.0
#> [76] tidyr_1.3.1 edgeR_4.7.0 AnnotationDbi_1.71.0
#> [79] GenomeInfoDbData_1.2.14 beeswarm_0.4.0 BiocSingular_1.25.0
#> [82] vipor_0.4.7 rsvd_1.0.5 Formula_1.2-5
#> [85] cli_3.6.5 rappdirs_0.3.3 S4Arrays_1.9.0
#> [88] viridisLite_0.4.2 dplyr_1.1.4 gtable_0.3.6
#> [91] rstatix_0.7.2 sass_0.4.10 digest_0.6.37
#> [94] dqrng_0.4.1 ggrepel_0.9.6 SparseArray_1.9.0
#> [97] rjson_0.2.23 farver_2.1.2 memoise_2.0.1
#> [100] htmltools_0.5.8.1 lifecycle_1.0.4 httr_1.4.7
#> [103] statmod_1.5.0 bit64_4.6.0-1