escheR
escheR 1.5.0
The goal of escheR
is to create an unified multi-dimensional spatial visualizations for spatially-resolved transcriptomics data following Gestalt principles.
Our manuscript describing the innovative visualization is published in Bioinformatics Advances.
You can install the latest release version of escheR
from Bioconductor via the following code. Additional details are shown on the Bioconductor page.
if (!require("BiocManager", quietly = TRUE)) {
install.packages("BiocManager")
}
BiocManager::install("escheR")
The latest development version can also be installed from the devel
version of Bioconductor or from GitHub following
if (!require("devtools")) install.packages("devtools")
devtools::install_github("boyiguo1/escheR")
# `devel` version from Bioconductor
BiocManager::install(version='devel')
Starting from Version 1.2.0, escheR
package supports three data structures, including SpatialExperiment
, SingleCellExperiment
, and data.frame
from base
R.
In the following example, we demonstrate the how to use escheR
with a SpatialExperiment
object. Please visit our other tutorials for [TODO: add items and list].
To run the demonstration, there are two necessary packages to load, escheR
and STexampleData
. STexampleData
contains a pre-processed 10x Visium dataset.
To note, escheR
will automatically load ggplot2
package. Hence, explicitly loading ggplot2
is not required.
library(escheR)
library(STexampleData)
In this step, we will find one 10xVisium sample from STexampleData
package, indexed by brain number of “151673”. For more information, please see the vignettes of STexampleData
.
spe <- Visium_humanDLPFC()
# Subset in-tissue spots
spe <- spe[, spe$in_tissue == 1]
spe <- spe[, !is.na(spe$ground_truth)]
Here is a summary of the SpatialExperiment
object called spe
.
spe
#> class: SpatialExperiment
#> dim: 33538 3611
#> metadata(0):
#> assays(1): counts
#> rownames(33538): ENSG00000243485 ENSG00000237613 ... ENSG00000277475
#> ENSG00000268674
#> rowData names(3): gene_id gene_name feature_type
#> colnames(3611): AAACAAGTATCTCCCA-1 AAACAATCTACTAGCA-1 ...
#> TTGTTTGTATTACACG-1 TTGTTTGTGTAAATTC-1
#> colData names(8): barcode_id sample_id ... reference cell_count
#> reducedDimNames(0):
#> mainExpName: NULL
#> altExpNames(0):
#> spatialCoords names(2) : pxl_col_in_fullres pxl_row_in_fullres
#> imgData names(4): sample_id image_id data scaleFactor
escheR
plotSimilar to ggplot2::ggplot()
, we first use the function make_escheR()
to create an empty plot. The input of make_escheR()
is a SpatialExperiment
object. The output of the function is a ggplot
object with no layer in it.
p <- make_escheR(spe)
Unlike ggplot2
, we use piping |>
instead of +
to apply layers the figure. Mainly, we have three functions add_fill
, add_ground
, add_symbol
. The inputs of these add_*
functions include the plots created using make_scheR()
and the variable name for the layer. Currently, the variable name should be in the the column data of the spe
object, i.e. colData(spe)
.
Here we first apply the add_fill
to add the spots color-coded by the total number of cells all spots(sum_umi
).
(p1 <- p |>
add_fill(var = "cell_count"))
It is okay to use any combination of the add_*
functions. For example, we want to show the spatial domains of the samples as the ground of the figure and use symbols to denote if each spot is within the outline of the tissue slice. In this example, all plotted spots are in the outlines of the tissue slice and hence marked with dots.
(p2 <- p |>
add_ground(var = "ground_truth")) # round layer
p2 |>
add_symbol(var = "ground_truth", size = 0.2) # Symbol layer
#> Warning: The shape palette can deal with a maximum of 6 discrete values because more
#> than 6 becomes difficult to discriminate
#> ℹ you have requested 7 values. Consider specifying shapes manually if you need
#> that many have them.
#> Warning: Removed 513 rows containing missing values or values outside the scale range
#> (`geom_point()`).