Skip to contents

The SpatialExperiment class provides methods to rotate and mirror SpatialExperiment objects and their spatialCoords.

Usage

# S4 method for class 'SpatialExperiment'
rotateCoords(x, sample_id = NULL, degrees = 90, warn = TRUE)

# S4 method for class 'SpatialExperiment'
mirrorCoords(x, sample_id = NULL, axis = c("h", "v"), warn = TRUE)

# S4 method for class 'SpatialExperiment'
rotateObject(x, sample_id = NULL, image_id = NULL, degrees = 90)

# S4 method for class 'SpatialExperiment'
mirrorObject(x, sample_id = NULL, image_id = NULL, axis = c("h", "v"))

Arguments

x

A SpatialExperiment object.

sample_id

Logical value or character vector specifying sample identifier(s) for scaleFactors. Default = TRUE (all samples).

degrees

single numeric in +/-[0,90,...,360] specifying how many degrees to rotate. A negative/positive value corresponds to counter-/clockwise rotation. Applicable for rotateCoords and rotateObject methods.

warn

Logical value indicating whether to print a warning about mismatches between coordinates and images, possible with the spatialCoords transformation methods rotateCoords and mirrorCoords.

axis

character string specifying whether to mirror horizontally ("h") or vertically ("v"). Applicable for mirrorCoords and mirrorObject methods.

image_id

Logical value or character vector specifying image identifier(s) for scaleFactors. Default = TRUE (all images).

Value

Return value varies depending on method, as described below.

Details

Additional details for each type of data attribute are provided below.

spatialCoords transformation methods

rotateCoords(x, sample_id, degrees, warn):

Apply a rotation to the spatialCoords of x, potentially subsetted to sample sample_id (or without subsetting if sample_id is NULL), by the specified number of degrees clockwise. Warn about mismatches with images if warn.

mirrorCoords(x, sample_id, axis, warn):

Reflect the spatialCoords of x across either the horizontal or vertical axis, specified by supplying "h" or "v" to the axis argument, respectively. Subset x to just the sample sample_id, if not NULL. Warn about mismatches with images if warn.

SpatialExperiment transformation wrapper methods

rotateObject(x, sample_id, image_id, degrees):

Apply a rotation to the spatialCoords and imgData of x, potentially subsetted to sample sample_id (or without subsetting if sample_id is NULL), by the specified number of degrees clockwise. Wrapper around rotateCoords and rotateImg.

mirrorObject(x, sample_id, image_id, axis):

Reflect the spatialCoords and imgData of x across either the horizontal or vertical axis, specified by supplying "h" or "v" to the axis argument, respectively. Subset x to just the sample sample_id, if not NULL. Wrapper around mirrorCoords and mirrorImg.

Author

Nicholas J. Eagles

Examples

example(read10xVisium)
#> 
#> rd10xV> dir <- system.file(
#> rd10xV+   file.path("extdata", "10xVisium"), 
#> rd10xV+   package = "SpatialExperiment")
#> 
#> rd10xV> sample_ids <- c("section1", "section2")
#> 
#> rd10xV> samples <- file.path(dir, sample_ids, "outs")
#> 
#> rd10xV> list.files(samples[1])
#> [1] "raw_feature_bc_matrix" "spatial"              
#> 
#> rd10xV> list.files(file.path(samples[1], "spatial"))
#> [1] "scalefactors_json.json"    "tissue_lowres_image.png"  
#> [3] "tissue_positions_list.csv"
#> 
#> rd10xV> file.path(samples[1], "raw_feature_bc_matrix")
#> [1] "/tmp/RtmppdZi9A/temp_libpathcf263c794d1/SpatialExperiment/extdata/10xVisium/section1/outs/raw_feature_bc_matrix"
#> 
#> rd10xV> (spe <- read10xVisium(samples, sample_ids, 
#> rd10xV+   type = "sparse", data = "raw", 
#> rd10xV+   images = "lowres", load = FALSE))
#> class: SpatialExperiment 
#> dim: 50 99 
#> metadata(0):
#> assays(1): counts
#> rownames(50): ENSMUSG00000051951 ENSMUSG00000089699 ...
#>   ENSMUSG00000005886 ENSMUSG00000101476
#> rowData names(1): symbol
#> colnames(99): AAACAACGAATAGTTC-1 AAACAAGTATCTCCCA-1 ...
#>   AAAGTCGACCCTCAGT-1 AAAGTGCCATCAATTA-1
#> colData names(4): in_tissue array_row array_col sample_id
#> 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
#> 
#> rd10xV> # base directory 'outs/' from Space Ranger can also be omitted
#> rd10xV> samples2 <- file.path(dir, sample_ids)
#> 
#> rd10xV> (spe2 <- read10xVisium(samples2, sample_ids, 
#> rd10xV+   type = "sparse", data = "raw", 
#> rd10xV+   images = "lowres", load = FALSE))
#> class: SpatialExperiment 
#> dim: 50 99 
#> metadata(0):
#> assays(1): counts
#> rownames(50): ENSMUSG00000051951 ENSMUSG00000089699 ...
#>   ENSMUSG00000005886 ENSMUSG00000101476
#> rowData names(1): symbol
#> colnames(99): AAACAACGAATAGTTC-1 AAACAAGTATCTCCCA-1 ...
#>   AAAGTCGACCCTCAGT-1 AAAGTGCCATCAATTA-1
#> colData names(4): in_tissue array_row array_col sample_id
#> 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
#> 
#> rd10xV> # tabulate number of spots mapped to tissue
#> rd10xV> cd <- colData(spe)
#> 
#> rd10xV> table(
#> rd10xV+   in_tissue = cd$in_tissue, 
#> rd10xV+   sample_id = cd$sample_id)
#>          sample_id
#> in_tissue section1 section2
#>     FALSE       28       27
#>     TRUE        22       22
#> 
#> rd10xV> # view available images
#> rd10xV> imgData(spe)
#> DataFrame with 2 rows and 4 columns
#>     sample_id    image_id   data scaleFactor
#>   <character> <character> <list>   <numeric>
#> 1    section1      lowres   ####   0.0510334
#> 2    section2      lowres   ####   0.0510334

# rotateCoords(), mirrorCoords(), rotateObject(), and mirrorObject() return a
# SpatialExperiment, potentially subsetted by sample.

# Subset to just "section1"; rotate coordinates 90 degrees clockwise followed
# by a reflection across the vertical axis
spe_coords <- rotateCoords(spe, sample_id = "section1", degrees = 90)
#> Warning: Invoking 'rotateCoords' or 'rotateImg' independently may result in mismatches between coordinates and images. Please use 'rotateObject' to ensure consistency.
spe_coords <- mirrorCoords(spe_coords, axis = "v")
#> Warning: Invoking 'mirrorCoords' or 'mirrorImg' independently may result in mismatches between coordinates and images. Please use 'mirrorObject' to ensure consistency.

# Subset to just "section2"; transform both the imgData() and spatialCoords()
# by a 180-degree rotation then reflection across the vertical axis
spe_wrapper <- rotateObject(spe, sample_id = "section2", degrees = 180)
spe_wrapper <- mirrorObject(spe_wrapper, axis = "v")