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.
SingleCellExperiment
SpatialExperiment
inherits
SingleCellExperiment
Following 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.4.0 alpha (2024-03-27 r86216)
#> Platform: aarch64-apple-darwin20
#> Running under: macOS Ventura 13.6.5
#>
#> Matrix products: default
#> BLAS: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib
#> LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib; LAPACK version 3.12.0
#>
#> locale:
#> [1] en_US.UTF-8/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] BumpyMatrix_1.11.0 scran_1.31.3
#> [3] scater_1.31.2 scuttle_1.13.1
#> [5] STexampleData_1.11.1 SpatialExperiment_1.13.2
#> [7] SingleCellExperiment_1.25.1 SummarizedExperiment_1.33.3
#> [9] Biobase_2.63.1 GenomicRanges_1.55.4
#> [11] GenomeInfoDb_1.39.14 IRanges_2.37.1
#> [13] S4Vectors_0.41.6 MatrixGenerics_1.15.1
#> [15] matrixStats_1.2.0 ExperimentHub_2.11.3
#> [17] AnnotationHub_3.11.5 BiocFileCache_2.11.2
#> [19] dbplyr_2.5.0 BiocGenerics_0.49.1
#> [21] escheR_1.3.2 ggplot2_3.5.0
#>
#> loaded via a namespace (and not attached):
#> [1] DBI_1.2.2 gridExtra_2.3
#> [3] rlang_1.1.3 magrittr_2.0.3
#> [5] compiler_4.4.0 RSQLite_2.3.5
#> [7] DelayedMatrixStats_1.25.3 png_0.1-8
#> [9] vctrs_0.6.5 pkgconfig_2.0.3
#> [11] crayon_1.5.2 fastmap_1.1.1
#> [13] magick_2.8.3 XVector_0.43.1
#> [15] labeling_0.4.3 utf8_1.2.4
#> [17] rmarkdown_2.26 UCSC.utils_0.99.7
#> [19] ggbeeswarm_0.7.2 purrr_1.0.2
#> [21] bit_4.0.5 bluster_1.13.0
#> [23] xfun_0.43 zlibbioc_1.49.3
#> [25] cachem_1.0.8 beachmat_2.19.4
#> [27] jsonlite_1.8.8 blob_1.2.4
#> [29] highr_0.10 DelayedArray_0.29.9
#> [31] BiocParallel_1.37.1 cluster_2.1.6
#> [33] irlba_2.3.5.1 parallel_4.4.0
#> [35] R6_2.5.1 bslib_0.6.2
#> [37] limma_3.59.9 jquerylib_0.1.4
#> [39] Rcpp_1.0.12 knitr_1.45
#> [41] igraph_2.0.3 Matrix_1.7-0
#> [43] tidyselect_1.2.1 viridis_0.6.5
#> [45] abind_1.4-5 yaml_2.3.8
#> [47] codetools_0.2-19 curl_5.2.1
#> [49] lattice_0.22-6 tibble_3.2.1
#> [51] withr_3.0.0 KEGGREST_1.43.0
#> [53] evaluate_0.23 Biostrings_2.71.5
#> [55] pillar_1.9.0 BiocManager_1.30.22
#> [57] filelock_1.0.3 generics_0.1.3
#> [59] BiocVersion_3.19.1 sparseMatrixStats_1.15.1
#> [61] munsell_0.5.0 scales_1.3.0
#> [63] glue_1.7.0 metapod_1.11.1
#> [65] tools_4.4.0 hexbin_1.28.3
#> [67] BiocNeighbors_1.21.2 ScaledMatrix_1.11.1
#> [69] locfit_1.5-9.9 grid_4.4.0
#> [71] edgeR_4.1.23 AnnotationDbi_1.65.2
#> [73] colorspace_2.1-0 GenomeInfoDbData_1.2.12
#> [75] beeswarm_0.4.0 BiocSingular_1.19.0
#> [77] vipor_0.4.7 cli_3.6.2
#> [79] rsvd_1.0.5 rappdirs_0.3.3
#> [81] fansi_1.0.6 viridisLite_0.4.2
#> [83] S4Arrays_1.3.7 dplyr_1.1.4
#> [85] gtable_0.3.4 sass_0.4.9
#> [87] digest_0.6.35 dqrng_0.3.2
#> [89] ggrepel_0.9.5 SparseArray_1.3.5
#> [91] farver_2.1.1 rjson_0.2.21
#> [93] memoise_2.0.1 htmltools_0.5.8
#> [95] lifecycle_1.0.4 httr_1.4.7
#> [97] mime_0.12 statmod_1.5.0
#> [99] bit64_4.0.5