Visualization Guide for scaper

Introduction

This guide demonstrates visualization techniques for cytokine activity data generated by scaper.

Basic Heatmap

library(scaper)
library(Seurat)
library(pheatmap)

# Compute cytokine activities
data(pbmc_small)
result <- scapeForSeurat(pbmc_small, database = "cytosig", 
                         cytokine = "all", normalize = TRUE)

# Extract activity matrix
activity <- as.matrix(GetAssayData(result, assay = "scape", slot = "data"))

# Create heatmap
pheatmap(
  activity,
  fontsize_row = 6,
  fontsize_col = 4,
  cluster_rows = TRUE,
  cluster_cols = TRUE,
  color = colorRampPalette(c("blue", "white", "red"))(100),
  main = "Cytokine Activity Heatmap"
)

Seurat Integration

# Add activities to metadata
top_cytokines <- c("IL6", "IFNG", "IL4", "TNFA")
for (cyt in top_cytokines) {
  result <- AddMetaData(result, 
                        metadata = activity[cyt, ],
                        col.name = paste0(cyt, "_activity"))
}

# Violin plots
VlnPlot(result, features = paste0(top_cytokines, "_activity"), ncol = 2)

# Feature plots (requires UMAP/tSNE)
FeaturePlot(result, features = paste0(top_cytokines[1:2], "_activity"))

Distribution Analysis

# Boxplot of activity scores
selected_cyts <- c("IL6", "IFNG", "IL4", "TNFA")
boxplot(t(activity[selected_cyts, ]),
        col = rainbow(length(selected_cyts)),
        main = "Cytokine Activity Distributions",
        ylab = "Activity Score",
        las = 2)
abline(h = c(0.3, 0.7), col = "gray", lty = 2)

Correlation Analysis

# Cytokine-cytokine correlation
cor_matrix <- cor(t(activity))

pheatmap(
  cor_matrix,
  color = colorRampPalette(c("blue", "white", "red"))(100),
  breaks = seq(-1, 1, length.out = 101),
  main = "Cytokine Activity Correlations"
)

Best Practices

DO: - Use diverging color schemes for activity scores - Cluster to reveal patterns - Annotate with cell types - Show scale bars

DON’T: - Over-plot (sample if >1000 cells) - Use rainbow colors for continuous data - Ignore outliers without justification

Session Information

sessionInfo()
#> R version 4.6.0 (2026-04-24)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.4 LTS
#> 
#> Matrix products: default
#> BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
#> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0
#> 
#> locale:
#>  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
#>  [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: Etc/UTC
#> tzcode source: system (glibc)
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> other attached packages:
#> [1] pheatmap_1.0.13    Seurat_5.5.0       SeuratObject_5.4.0 sp_2.2-1          
#> [5] scaper_0.2.1       rmarkdown_2.31    
#> 
#> loaded via a namespace (and not attached):
#>   [1] deldir_2.0-4           pbapply_1.7-4          gridExtra_2.3         
#>   [4] rlang_1.2.0            magrittr_2.0.5         RcppAnnoy_0.0.23      
#>   [7] otel_0.2.0             spatstat.geom_3.8-1    matrixStats_1.5.0     
#>  [10] ggridges_0.5.7         compiler_4.6.0         png_0.1-9             
#>  [13] vctrs_0.7.3            reshape2_1.4.5         stringr_1.6.0         
#>  [16] pkgconfig_2.0.3        fastmap_1.2.0          promises_1.5.0        
#>  [19] purrr_1.2.2            xfun_0.57              cachem_1.1.0          
#>  [22] jsonlite_2.0.0         goftest_1.2-3          later_1.4.8           
#>  [25] spatstat.utils_3.2-3   irlba_2.3.7            parallel_4.6.0        
#>  [28] cluster_2.1.8.2        R6_2.6.1               ica_1.0-3             
#>  [31] spatstat.data_3.1-9    bslib_0.11.0           stringi_1.8.7         
#>  [34] RColorBrewer_1.1-3     reticulate_1.46.0      spatstat.univar_3.2-0 
#>  [37] parallelly_1.47.0      lmtest_0.9-40          jquerylib_0.1.4       
#>  [40] scattermore_1.2        Rcpp_1.1.1-1.1         knitr_1.51            
#>  [43] tensor_1.5.1           future.apply_1.20.2    zoo_1.8-15            
#>  [46] sctransform_0.4.3      httpuv_1.6.17          Matrix_1.7-5          
#>  [49] splines_4.6.0          igraph_2.3.1           tidyselect_1.2.1      
#>  [52] abind_1.4-8            yaml_2.3.12            spatstat.random_3.5-0 
#>  [55] codetools_0.2-20       miniUI_0.1.2           spatstat.explore_3.8-1
#>  [58] listenv_0.10.1         lattice_0.22-9         tibble_3.3.1          
#>  [61] plyr_1.8.9             shiny_1.13.0           S7_0.2.2              
#>  [64] ROCR_1.0-12            evaluate_1.0.5         Rtsne_0.17            
#>  [67] future_1.70.0          fastDummies_1.7.6      survival_3.8-6        
#>  [70] polyclip_1.10-7        xml2_1.5.2             fitdistrplus_1.2-6    
#>  [73] pillar_1.11.1          KernSmooth_2.23-26     plotly_4.12.0         
#>  [76] generics_0.1.4         RcppHNSW_0.6.0         ggplot2_4.0.3         
#>  [79] scales_1.4.0           globals_0.19.1         xtable_1.8-8          
#>  [82] glue_1.8.1             lazyeval_0.2.3         maketools_1.3.2       
#>  [85] tools_4.6.0            sys_3.4.3              data.table_1.18.4     
#>  [88] RSpectra_0.16-2        RANN_2.6.2             buildtools_1.0.0      
#>  [91] dotCall64_1.2          cowplot_1.2.0          grid_4.6.0            
#>  [94] tidyr_1.3.2            nlme_3.1-169           patchwork_1.3.2       
#>  [97] cli_3.6.6              spatstat.sparse_3.2-0  spam_2.11-3           
#> [100] viridisLite_0.4.3      dplyr_1.2.1            uwot_0.2.4            
#> [103] gtable_0.3.6           sass_0.4.10            digest_0.6.39         
#> [106] progressr_0.19.0       ggrepel_0.9.8          htmlwidgets_1.6.4     
#> [109] farver_2.1.2           htmltools_0.5.9        lifecycle_1.0.5       
#> [112] httr_1.4.8             mime_0.13              MASS_7.3-65

Author: Zaoqu Liu
GitHub: Zaoqu-Liu/scaper