scplotter to work with 10x Visium data prepared by Giotto¶
See: https://drieslab.github.io/giotto_workshop_2024/visium-part-i.html and https://drieslab.github.io/giotto_workshop_2024/visium-part-ii.html
Go back to scplotter documentation: https://pwwang.github.io/scplotter/
InĀ [1]:
library(Giotto)
# Ensure Giotto can access a python env
genv_exists <- suppressMessages(checkGiottoEnvironment())
print(genv_exists)
python_path <- file.path(Sys.getenv("HOME"), "miniconda3", "envs", "giotto_env", "bin", "python")
Sys.setenv(RETICULATE_PYTHON = python_path)
invisible(capture.output(suppressMessages(set_giotto_python_path(python_path = python_path))))
# library(scplotter)
devtools::load_all()
Loading required package: GiottoClass Newer devel version of GiottoClass on GitHub: 0.4.8
Giotto Suite 4.2.1
[1] TRUE
ā¹ Loading scplotter
InĀ [2]:
library(Giotto)
## Set instructions
results_folder <- "data/Adult_Mouse_Brain.results"
instructions <- createGiottoInstructions(
save_dir = results_folder,
save_plot = FALSE,
show_plot = TRUE,
return_plot = TRUE,
python_path = python_path
)
## Provide the path to the visium folder
data_path <- "data/Adult_Mouse_Brain"
## Create object directly from the visium folder
visium_brain <- createGiottoVisiumObject(
visium_dir = data_path,
expr_data = "raw",
png_name = "tissue_lowres_image.png",
gene_column_index = 2,
instructions = instructions
)
visium_brain$in_tissue <- ifelse(visium_brain$in_tissue == 1, "Yes", "No")
# visium_brain@cell_metadata
python already initialized in this session active environment : 'giotto_env' python version : 3.10 A structured visium directory will be used - found image - found scalefactors. attempting automatic alignment for the 'lowres' image Getting values from [cell][rna] cell metadata
InĀ [3]:
options(repr.plot.width = 7, repr.plot.height = 6)
# devtools::load_all()
p1 <- SpatDimPlot(visium_brain, image = TRUE, group_by = "in_tissue",
palette = "Blues", # alias of points_palette
alpha = 0.6, # alias of points_alpha
shape = 21, # alias of points_shape
border_color = "grey80", # alias of points_border_color
size = 2 # alias of points_size
)
p1
InĀ [4]:
metadata <- getCellMetadata(gobject = visium_brain,
output = "data.table")
in_tissue_barcodes <- metadata[in_tissue == "Yes"]$cell_ID
visium_brain <- subsetGiotto(gobject = visium_brain,
cell_ids = in_tissue_barcodes)
visium_brain_statistics <- addStatistics(gobject = visium_brain,
expression_values = "raw")
calculating statistics for "raw" expression
InĀ [5]:
options(repr.plot.width = 7, repr.plot.height = 8)
# devtools::load_all()
p1 <- SpatFeaturePlot(visium_brain_statistics, features = "nr_feats",
points_shape = 21, points_size = 2.2, points_border_color = "grey80")
p1
InĀ [6]:
visium_brain <- filterGiotto(
gobject = visium_brain,
expression_threshold = 1,
feat_det_in_min_cells = 50,
min_det_feats_per_cell = 1000,
expression_values = "raw",
verbose = TRUE
)
visium_brain <- normalizeGiotto(
gobject = visium_brain,
scalefactor = 6000,
verbose = TRUE
)
visium_brain <- addStatistics(gobject = visium_brain)
completed 1: preparation
completed 2: subset expression data completed 3: subset spatial locations completed 4: subset cell metadata completed 5: subset feature metadata completed 6: subset spatial network(s) completed 7: subsetted dimension reductions completed 8: subsetted nearest network(s) completed 9: subsetted spatial enrichment results for cell --> cell found back in polygon layer: cell completed 10: subsetted spatial information data
Feature type: rna Number of cells removed: 4 out of 2702 Number of feats removed: 7311 out of 22125
first scale feats and then cells Setting expression [cell][rna] normalized Setting expression [cell][rna] scaled calculating statistics for "normalized" expression
InĀ [7]:
options(repr.plot.width = 7, repr.plot.height = 8)
# devtools::load_all()
p1 <- SpatFeaturePlot(visium_brain, features = "nr_feats",
points_shape = 21, points_size = 2.2, points_border_color = "grey80")
p1
InĀ [8]:
# visium_brain <- calculateHVF(gobject = visium_brain,
# method = "cov_loess",
# save_plot = TRUE,
# default_save_name = "HVFplot_loess")
# visium_brain <- calculateHVF(gobject = visium_brain,
# method = "var_p_resid",
# save_plot = TRUE,
# default_save_name = "HVFplot_pearson")
# visium_brain <- calculateHVF(gobject = visium_brain,
# method = "cov_groups",
# save_plot = TRUE,
# default_save_name = "HVFplot_binned")
InĀ [9]:
visium_brain <- runPCA(gobject = visium_brain)
my_features <- head(getFeatureMetadata(visium_brain,
output = "data.table")$feat_ID,
1000)
visium_brain <- runPCA(gobject = visium_brain,
feats_to_use = my_features,
name = "custom_pca")
visium_brain <- runUMAP(visium_brain,
dimensions_to_use = 1:10)
visium_brain <- runtSNE(gobject = visium_brain,
dimensions_to_use = 1:10)
visium_brain <- createNearestNetwork(gobject = visium_brain,
dimensions_to_use = 1:10,
k = 15)
visium_brain <- createNearestNetwork(gobject = visium_brain,
dimensions_to_use = 1:10,
k = 15,
type = "kNN")
visium_brain <- doLeidenCluster(gobject = visium_brain,
resolution = 0.4,
n_iterations = 1000)
visium_brain <- doLouvainCluster(visium_brain)
visium_brain@cell_metadata$cell$rna$leiden_clus <- as.factor(visium_brain@cell_metadata$cell$rna$leiden_clus)
visium_brain@cell_metadata$cell$rna$louvain_clus <- as.factor(visium_brain@cell_metadata$cell$rna$louvain_clus)
"hvf" was not found in the gene metadata information. all genes will be used.
Setting dimension reduction [cell][rna] pca a custom vector of genes will be used to subset the matrix Setting dimension reduction [cell][rna] custom_pca Setting dimension reduction [cell][rna] umap Setting dimension reduction [cell][rna] tsne
InĀ [10]:
options(repr.plot.width = 15, repr.plot.height = 4)
p1 <- CellDimPlot(visium_brain, group_by = "leiden_clus")
p2 <- CellDimPlot(visium_brain, group_by = "leiden_clus", reduction = "umap")
p3 <- CellDimPlot(visium_brain, group_by = "leiden_clus", reduction = "tsne")
p1 + p2 + p3
InĀ [11]:
options(repr.plot.width = 6, repr.plot.height = 5)
CellDimPlot(visium_brain, group_by = "leiden_clus", reduction = "umap", graph = TRUE)
The NN network name was not specified, default to the first: "sNN.pca"
InĀ [23]:
options(repr.plot.width = 8, repr.plot.height = 8)
FeatureStatPlot(
visium_brain,
reduction = "umap",
features = c("Xkr4", "Gm19938", "Slc14a2", "Irx5"),
plot_type = "dim"
)
InĀ [13]:
visium_brain <- createSpatialNetwork(gobject = visium_brain,
method = "kNN",
k = 6,
maximum_distance_knn = 400,
name = "spatial_network")
Setting spatial network [cell] spatial_network
InĀ [14]:
options(repr.plot.width = 12, repr.plot.height = 6)
devtools::load_all()
p1 <- SpatDimPlot(visium_brain, group_by = "leiden_clus")
p2 <- SpatDimPlot(visium_brain, group_by = "louvain_clus")
p1 + p2
ā¹ Loading scplotter
InĀ [15]:
options(repr.plot.width = 7, repr.plot.height = 8)
# devtools::load_all()
SpatDimPlot(visium_brain, group_by = NULL, graph = "spatial_network", points_edge_color = "black",
points_edge_size = 0.5, points_size = 0.5)
InĀ [16]:
x <- sessionInfo()
x <- capture.output(print(x))
# hide the BLAS/LAPACK paths
x <- x[!startsWith(x, "BLAS/LAPACK:")]
cat(paste(x, collapse = "\n"))
R version 4.4.3 (2025-02-28) Platform: x86_64-conda-linux-gnu Running under: Red Hat Enterprise Linux 8.10 (Ootpa) Matrix products: default locale: [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C [3] LC_TIME=en_US.UTF-8 LC_COLLATE=C [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 [7] LC_PAPER=en_US.UTF-8 LC_NAME=C [9] LC_ADDRESS=C LC_TELEPHONE=C [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C time zone: America/Chicago tzcode source: system (glibc) attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] scplotter_0.4.0 Giotto_4.2.1 GiottoClass_0.4.7 loaded via a namespace (and not attached): [1] fs_1.6.6 matrixStats_1.5.0 [3] spatstat.sparse_3.1-0 bitops_1.0-9 [5] sf_1.0-20 devtools_2.4.5 [7] httr_1.4.7 RColorBrewer_1.1-3 [9] repr_1.1.7 profvis_0.4.0 [11] tools_4.4.3 sctransform_0.4.2 [13] backports_1.5.0 R6_2.6.1 [15] uwot_0.2.3 lazyeval_0.2.2 [17] urlchecker_1.0.1 withr_3.0.2 [19] sp_2.2-0 gridExtra_2.3 [21] GiottoUtils_0.2.5 progressr_0.15.1 [23] quantreg_6.00 cli_3.6.5 [25] Biobase_2.62.0 spatstat.explore_3.4-3 [27] fastDummies_1.7.5 iNEXT_3.0.1 [29] labeling_0.4.3 Seurat_5.3.0 [31] spatstat.data_3.1-6 proxy_0.4-27 [33] ggridges_0.5.6 pbapply_1.7-2 [35] pbdZMQ_0.3-14 dbscan_1.2.2 [37] R.utils_2.13.0 stringdist_0.9.15 [39] parallelly_1.45.0 sessioninfo_1.2.3 [41] VGAM_1.1-13 rstudioapi_0.17.1 [43] FNN_1.1.4.1 generics_0.1.4 [45] shape_1.4.6.1 gtools_3.9.5 [47] ica_1.0-3 spatstat.random_3.4-1 [49] dplyr_1.1.4 Matrix_1.7-3 [51] S4Vectors_0.40.2 abind_1.4-5 [53] R.methodsS3_1.8.2 terra_1.8-42 [55] lifecycle_1.0.4 SummarizedExperiment_1.32.0 [57] SparseArray_1.2.4 Rtsne_0.17 [59] grid_4.4.3 promises_1.3.2 [61] crayon_1.5.3 miniUI_0.1.2 [63] lattice_0.22-7 beachmat_2.18.1 [65] cowplot_1.1.3 pillar_1.10.2 [67] GenomicRanges_1.54.1 rjson_0.2.23 [69] future.apply_1.20.0 codetools_0.2-20 [71] glue_1.8.0 spatstat.univar_3.1-3 [73] data.table_1.17.4 remotes_2.5.0 [75] vctrs_0.6.5 png_0.1-8 [77] spam_2.11-1 testthat_3.2.3 [79] gtable_0.3.6 assertthat_0.2.1 [81] cachem_1.1.0 S4Arrays_1.2.1 [83] mime_0.13 tidygraph_1.3.0 [85] survival_3.8-3 SingleCellExperiment_1.24.0 [87] units_0.8-5 ellipsis_0.3.2 [89] scRepertoire_2.2.1 fitdistrplus_1.2-2 [91] ROCR_1.0-11 nlme_3.1-168 [93] usethis_3.1.0 RcppAnnoy_0.0.22 [95] evd_2.3-7.1 GenomeInfoDb_1.38.8 [97] rprojroot_2.0.4 irlba_2.3.5.1 [99] KernSmooth_2.23-26 DBI_1.2.3 [101] plotthis_0.7.1 colorspace_2.1-1 [103] BiocGenerics_0.48.1 tidyselect_1.2.1 [105] compiler_4.4.3 SparseM_1.84-2 [107] xml2_1.3.8 desc_1.4.3 [109] ggdendro_0.2.0 DelayedArray_0.28.0 [111] plotly_4.10.4 checkmate_2.3.2 [113] scales_1.4.0 classInt_0.4-11 [115] lmtest_0.9-40 rappdirs_0.3.3 [117] stringr_1.5.1 digest_0.6.37 [119] goftest_1.2-3 spatstat.utils_3.1-4 [121] XVector_0.42.0 htmltools_0.5.8.1 [123] GiottoVisuals_0.2.12 pkgconfig_2.0.3 [125] base64enc_0.1-3 MatrixGenerics_1.14.0 [127] fastmap_1.2.0 rlang_1.1.6 [129] GlobalOptions_0.1.2 htmlwidgets_1.6.4 [131] shiny_1.10.0 farver_2.1.2 [133] zoo_1.8-14 jsonlite_2.0.0 [135] BiocParallel_1.36.0 R.oo_1.27.1 [137] BiocSingular_1.18.0 RCurl_1.98-1.17 [139] magrittr_2.0.3 GenomeInfoDbData_1.2.11 [141] dotCall64_1.2 patchwork_1.3.0 [143] IRkernel_1.3.2 Rcpp_1.0.14 [145] evmix_2.12 ggnewscale_0.5.1 [147] viridis_0.6.5 reticulate_1.42.0 [149] truncdist_1.0-2 stringi_1.8.7 [151] ggalluvial_0.12.5 ggraph_2.2.1 [153] brio_1.1.5 zlibbioc_1.48.2 [155] MASS_7.3-64 plyr_1.8.9 [157] pkgbuild_1.4.8 parallel_4.4.3 [159] listenv_0.9.1 ggrepel_0.9.6 [161] forcats_1.0.0 deldir_2.0-4 [163] graphlayouts_1.2.2 IRdisplay_1.1 [165] splines_4.4.3 gridtext_0.1.5 [167] tensor_1.5 circlize_0.4.16 [169] colorRamp2_0.1.0 igraph_2.0.3 [171] uuid_1.2-1 spatstat.geom_3.4-1 [173] cubature_2.1.4 RcppHNSW_0.6.0 [175] ScaledMatrix_1.10.0 reshape2_1.4.4 [177] stats4_4.4.3 pkgload_1.4.0 [179] evaluate_1.0.3 SeuratObject_5.1.0 [181] tweenr_2.0.3 httpuv_1.6.15 [183] MatrixModels_0.5-4 RANN_2.6.2 [185] tidyr_1.3.1 purrr_1.0.4 [187] polyclip_1.10-7 future_1.58.0 [189] scattermore_1.2 ggplot2_3.5.2 [191] ggforce_0.4.2 rsvd_1.0.5 [193] xtable_1.8-4 e1071_1.7-16 [195] RSpectra_0.16-2 later_1.4.2 [197] class_7.3-23 viridisLite_0.4.2 [199] gsl_2.1-8 tibble_3.2.1 [201] memoise_2.0.1 IRanges_2.36.0 [203] cluster_2.1.8.1 globals_0.18.0