## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(echo = TRUE)

## ----message=FALSE, warning=FALSE---------------------------------------------
library(ggspavis)
library(STexampleData)
library(patchwork)
library(scater)

## ----message=FALSE------------------------------------------------------------
# load data in SpatialExperiment format
spe <- Visium_mouseCoronal()
rownames(spe) <- rowData(spe)$gene_name
colData(spe)$sum <- colSums(counts(spe))

## ----message=FALSE, warning=FALSE, fig.width=8, fig.height=3.5----------------
p1 <- plotVisium(spe, annotate = "sum", highlight = "in_tissue", 
                 legend_position = "none")
p2 <- plotVisium(spe, annotate = "sum", highlight = "in_tissue", 
                 pal = "darkred") + 
  guides(fill = guide_colorbar(title = "Libsize"))

# display panels using patchwork
p1 | p2

## ----fig.width=8, fig.height=3.5----------------------------------------------
p1 <- plotVisium(spe, annotate = "Gapdh", highlight = "in_tissue")
p2 <- plotVisium(spe, annotate = "Mbp", highlight = "in_tissue")

# display panels using patchwork
p1 | p2

## ----fig.width=8, fig.height=3.5----------------------------------------------
p1 <- plotVisium(spe, annotate = "Mbp", highlight = "in_tissue", image = FALSE)
p2 <- plotVisium(spe, annotate = "Mbp", highlight = "in_tissue", spots = FALSE)

# display panels using patchwork
p1 | p2

## ----fig.width=8, fig.height=3.5----------------------------------------------
p1 <- plotSpots(spe, annotate = "Gapdh")
p2 <- plotSpots(spe, annotate = "Mbp", pal = "viridis")

# display panels using patchwork
p1 | p2

## ----message=FALSE------------------------------------------------------------
# load data in SpatialExperiment format
spe <- Visium_humanDLPFC()
rownames(spe) <- rowData(spe)$gene_name
colData(spe)$libsize <- colSums(counts(spe))

## ----message=FALSE, out.width="60%"-------------------------------------------
plotVisium(spe, annotate = "ground_truth", highlight = "in_tissue", 
           pal = "libd_layer_colors")

## ----fig.width=8, fig.height=4------------------------------------------------
p1 <- plotSpots(spe, annotate = "ground_truth") + 
  ggtitle("Reference")
p2 <- plotSpots(spe, annotate = "libsize") + 
  ggtitle("Library size")

# display panels using patchwork
p1 | p2

## -----------------------------------------------------------------------------
# calculate QC metrics using scater
spe <- addPerCellQCMetrics(spe, 
  subsets = list(mito = grepl("(^MT-)|(^mt-)", rowData(spe)$gene_name)))

# apply QC thresholds
colData(spe)$low_libsize <- colData(spe)$sum < 400 | colData(spe)$detected < 400
colData(spe)$high_mito <- colData(spe)$subsets_mito_percent > 30

## ----fig.width=8, fig.height=4.5----------------------------------------------
p1 <- plotSpotQC(spe, plot_type = "histogram", 
                 x_metric = "sum", annotate = "low_libsize", )
p2 <- plotSpotQC(spe, plot_type = "violin", 
                 x_metric = "sum", annotate = "low_libsize", point_size = 0.1)
p3 <- plotSpotQC(spe, plot_type = "spot", in_tissue = "in_tissue", 
                 annotate = "low_libsize", point_size = 0.2)

# display panels using patchwork
p1 | p2 | p3

## ----fig.width=10, fig.height=4.5---------------------------------------------
p1 <- plotSpotQC(spe, plot_type = "histogram", 
                 x_metric = "subsets_mito_percent", annotate = "high_mito", )
p2 <- plotSpotQC(spe, plot_type = "violin", 
                 x_metric = "subsets_mito_percent", annotate = "high_mito", point_size = 0.1)
p3 <- plotSpotQC(spe, plot_type = "spot", in_tissue = "in_tissue", 
                 annotate = "high_mito", point_size = 0.2)

# display panels using patchwork
p1 | p2 | p3

## ----out.width="60%", warning=FALSE, message=FALSE----------------------------
plotSpotQC(spe, plot_type = "scatter", 
           x_metric = "subsets_mito_percent", y_metric = "sum", 
           x_threshold = 30, y_threshold = 400)

## ----warning=FALSE, message=FALSE, fig.width=8, fig.height=4------------------
rowData(spe)$feature_sum <- rowSums(counts(spe))
rowData(spe)$low_abundance <- rowSums(counts(spe) > 0) < 20

p1 <- plotFeatureQC(spe, plot_type = "histogram", 
                    x_metric = "feature_sum", annotate = "low_abundance")
p2 <- plotFeatureQC(spe, plot_type = "violin", 
                    x_metric = "feature_sum", annotate = "low_abundance")

# display panels using patchwork
p1 | p2

## -----------------------------------------------------------------------------
sessionInfo()