ExperimentColorMap
classiSEE 2.0.0
Compiled date: 2020-04-27
Last edited: 2018-03-08
License: MIT + file LICENSE
iSEE coordinates the coloration in every plot via the ExperimentColorMap
class (Rue-Albrecht et al. 2018).
Colors for samples or features are defined from column or row metadata or assay values using “colormaps”.
Each colormap is a function that takes a single integer argument and returns that number of distinct colors.
The ExperimentColorMap
is a container that stores these functions for use within the iSEE()
function.
Users can define their own colormaps to customize coloration for specific assays or covariates.
For continuous variables, the function will be asked to generate a number of colors (21, by default).
Interpolation will then be performed internally to generate a color gradient.
Users can use existing color scales like viridis::viridis
or heat.colors
:
# Coloring for log-counts:
logcounts_color_fun <- viridis::viridis
It is also possible to use a function that completely ignores any arguments, and simply returns a fixed number of interpolation points:
# Coloring for FPKMs:
fpkm_color_fun <- function(n){
c("black","brown","red","orange","yellow")
}
For categorical variables, the function should accept the number of levels and return a color per level. Colors are automatically assigned to factor levels in the specified order of the levels.
# Coloring for the 'driver' metadata variable.
driver_color_fun <- function(n){
RColorBrewer::brewer.pal(n, "Set2")
}
Alternatively, the function can ignore its arguments and simply return a named vector of colors if users want to specify the color for each level explicitly
It is the user’s responsibility to ensure that all levels are accounted for1 Needless to say, these functions should not be used as shared or global colormaps..
For instance, the following colormap function will only be compatible with factors of two levels, namely "Y"
and "N"
:
# Coloring for the QC metadata variable:
qc_color_fun <- function(n){
qc_colors <- c("forestgreen", "firebrick1")
names(qc_colors) <- c("Y", "N")
qc_colors
}
When queried for a specific colormap of any type (assay, column data, or row data), the following process takes place:
ExperimentColorMap
.ExperimentColorMap
will revert to the default colormaps.By default, viridis
is used as the default continuous colormap, and hcl
is used as the default categorical colormap.
ExperimentColorMap
We store the set of colormap functions in an instance of the ExperimentColorMap
class.
Named functions passed as assays
, colData
, or rowData
arguments will be used for coloring data in those slots, respectively.
library(iSEE)
ecm <- ExperimentColorMap(
assays = list(
counts = heat.colors,
logcounts = logcounts_color_fun,
cufflinks_fpkm = fpkm_color_fun
),
colData = list(
passes_qc_checks_s = qc_color_fun,
driver_1_s = driver_color_fun
),
all_continuous = list(
assays = viridis::plasma
)
)
ecm
#> Class: ExperimentColorMap
#> assays(3): counts logcounts cufflinks_fpkm
#> colData(2): passes_qc_checks_s driver_1_s
#> rowData(0):
#> all_discrete(0):
#> all_continuous(1): assays
Users can change the defaults for all assays or column data by modifying the shared colormaps. Similarly, users can modify the defaults for all continuous or categorical data by modifying the global colormaps. This is demonstrated below for the continuous variables:
ExperimentColorMap(
all_continuous=list( # shared
assays=viridis::plasma,
colData=viridis::inferno
),
global_continuous=viridis::magma # global
)
#> Class: ExperimentColorMap
#> assays(0):
#> colData(0):
#> rowData(0):
#> all_discrete(0):
#> all_continuous(2): assays colData
#> global_continuous(1)
The ExperimentColorMap
class offers the following major features:
colDataColorMap(colormap, "coldata_name")
and setters assayColorMap(colormap, "assay_name") <- colormap_function
assays
, colData
, rowData
), or shared globally between all categorical or continuous data scales.Detailed examples on the use of ExperimentColorMap
objects are available in the documentation ?ExperimentColorMap
, as well as below.
Here, we use the allen
single-cell RNA-seq data set to demonstrate the use of the ExperimentColorMap
class.
Using the sce
object that we created previously, we create an iSEE
app with the SingleCellExperiment
object and the colormap generated above.
app <- iSEE(sce, colormap = ecm)
We run this using runApp
to open the app on our browser.
shiny::runApp(app)
Now, choose to color cells by Column data
and select passes_qc_checks_s
.
We will see that all cells that passed QC (Y
) are colored “forestgreen”, while the ones that didn’t pass are colored firebrick.
If we color any plot by gene expression, we see that use of counts follows the heat.colors
coloring scheme;
use of log-counts follows the viridis
coloring scheme;
and use of FPKMs follows the black-to-yellow scheme we defined in fpkm_color_fun
.
sessionInfo()
#> R version 4.0.0 (2020-04-24)
#> Platform: x86_64-pc-linux-gnu (64-bit)
#> Running under: Ubuntu 18.04.4 LTS
#>
#> Matrix products: default
#> BLAS: /home/biocbuild/bbs-3.11-bioc/R/lib/libRblas.so
#> LAPACK: /home/biocbuild/bbs-3.11-bioc/R/lib/libRlapack.so
#>
#> 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
#>
#> attached base packages:
#> [1] parallel stats4 stats graphics grDevices utils datasets
#> [8] methods base
#>
#> other attached packages:
#> [1] scater_1.16.0 ggplot2_3.3.0
#> [3] scRNAseq_2.1.7 iSEE_2.0.0
#> [5] SingleCellExperiment_1.10.0 SummarizedExperiment_1.18.0
#> [7] DelayedArray_0.14.0 matrixStats_0.56.0
#> [9] Biobase_2.48.0 GenomicRanges_1.40.0
#> [11] GenomeInfoDb_1.24.0 IRanges_2.22.0
#> [13] S4Vectors_0.26.0 BiocGenerics_0.34.0
#> [15] BiocStyle_2.16.0
#>
#> loaded via a namespace (and not attached):
#> [1] Rtsne_0.15 ggbeeswarm_0.6.0
#> [3] colorspace_1.4-1 rjson_0.2.20
#> [5] ellipsis_0.3.0 circlize_0.4.8
#> [7] XVector_0.28.0 GlobalOptions_0.1.1
#> [9] BiocNeighbors_1.6.0 clue_0.3-57
#> [11] DT_0.13 bit64_0.9-7
#> [13] interactiveDisplayBase_1.26.0 AnnotationDbi_1.50.0
#> [15] splines_4.0.0 knitr_1.28
#> [17] jsonlite_1.6.1 cluster_2.1.0
#> [19] dbplyr_1.4.3 png_0.1-7
#> [21] shinydashboard_0.7.1 shiny_1.4.0.2
#> [23] BiocManager_1.30.10 compiler_4.0.0
#> [25] httr_1.4.1 assertthat_0.2.1
#> [27] Matrix_1.2-18 fastmap_1.0.1
#> [29] later_1.0.0 BiocSingular_1.4.0
#> [31] htmltools_0.4.0 tools_4.0.0
#> [33] rsvd_1.0.3 igraph_1.2.5
#> [35] gtable_0.3.0 glue_1.4.0
#> [37] GenomeInfoDbData_1.2.3 dplyr_0.8.5
#> [39] rappdirs_0.3.1 Rcpp_1.0.4.6
#> [41] vctrs_0.2.4 nlme_3.1-147
#> [43] ExperimentHub_1.14.0 DelayedMatrixStats_1.10.0
#> [45] rintrojs_0.2.2 xfun_0.13
#> [47] stringr_1.4.0 irlba_2.3.3
#> [49] mime_0.9 miniUI_0.1.1.1
#> [51] lifecycle_0.2.0 shinyAce_0.4.1
#> [53] AnnotationHub_2.20.0 zlibbioc_1.34.0
#> [55] scales_1.1.0 colourpicker_1.0
#> [57] promises_1.1.0 RColorBrewer_1.1-2
#> [59] ComplexHeatmap_2.4.0 yaml_2.2.1
#> [61] curl_4.3 gridExtra_2.3
#> [63] memoise_1.1.0 stringi_1.4.6
#> [65] RSQLite_2.2.0 BiocVersion_3.11.1
#> [67] BiocParallel_1.22.0 shape_1.4.4
#> [69] rlang_0.4.5 pkgconfig_2.0.3
#> [71] bitops_1.0-6 evaluate_0.14
#> [73] lattice_0.20-41 purrr_0.3.4
#> [75] htmlwidgets_1.5.1 bit_1.1-15.2
#> [77] tidyselect_1.0.0 magrittr_1.5
#> [79] bookdown_0.18 R6_2.4.1
#> [81] DBI_1.1.0 pillar_1.4.3
#> [83] withr_2.2.0 mgcv_1.8-31
#> [85] RCurl_1.98-1.2 tibble_3.0.1
#> [87] crayon_1.3.4 shinyWidgets_0.5.1
#> [89] BiocFileCache_1.12.0 rmarkdown_2.1
#> [91] viridis_0.5.1 GetoptLong_0.1.8
#> [93] grid_4.0.0 blob_1.2.1
#> [95] digest_0.6.25 xtable_1.8-4
#> [97] httpuv_1.5.2 munsell_0.5.0
#> [99] beeswarm_0.2.3 viridisLite_0.3.0
#> [101] vipor_0.4.5 shinyjs_1.1
# devtools::session_info()
Rue-Albrecht, K., F. Marini, C. Soneson, and A. T. L. Lun. 2018. “ISEE: Interactive Summarizedexperiment Explorer.” F1000Research 7 (June):741.