Compiled date: 2025-11-17
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:
It is also possible to use a function that completely ignores any arguments, and simply returns a fixed number of interpolation points:
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. For instance, the following colormap
function will only be compatible with factors of two levels, namely
"Y" and "N":
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.
ExperimentColorMapWe 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): assaysUsers 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:
The ExperimentColorMap class offers the following major
features:
colDataColorMap(colormap, "coldata_name") and setters
assayColorMap(colormap, "assay_name") <- colormap_functionassays, 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.
We run this using runApp to open the app on our
browser.
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.5.2 (2025-10-31)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.3 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=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: Etc/UTC
#> tzcode source: system (glibc)
#>
#> attached base packages:
#> [1] stats4 stats graphics grDevices utils datasets methods
#> [8] base
#>
#> other attached packages:
#> [1] TENxPBMCData_1.29.0 HDF5Array_1.39.0
#> [3] h5mread_1.3.0 rhdf5_2.55.8
#> [5] DelayedArray_0.37.0 SparseArray_1.11.1
#> [7] S4Arrays_1.11.0 abind_1.4-8
#> [9] Matrix_1.7-4 scater_1.39.0
#> [11] ggplot2_4.0.1 scuttle_1.21.0
#> [13] scRNAseq_2.25.0 iSEE_2.23.1
#> [15] SingleCellExperiment_1.33.0 SummarizedExperiment_1.41.0
#> [17] Biobase_2.71.0 GenomicRanges_1.63.0
#> [19] Seqinfo_1.1.0 IRanges_2.45.0
#> [21] S4Vectors_0.49.0 BiocGenerics_0.57.0
#> [23] generics_0.1.4 MatrixGenerics_1.23.0
#> [25] matrixStats_1.5.0 BiocStyle_2.39.0
#>
#> loaded via a namespace (and not attached):
#> [1] splines_4.5.2 later_1.4.4 BiocIO_1.21.0
#> [4] bitops_1.0-9 filelock_1.0.3 tibble_3.3.0
#> [7] XML_3.99-0.20 lifecycle_1.0.4 httr2_1.2.1
#> [10] doParallel_1.0.17 lattice_0.22-7 ensembldb_2.35.0
#> [13] alabaster.base_1.11.1 magrittr_2.0.4 sass_0.4.10
#> [16] rmarkdown_2.30 jquerylib_0.1.4 yaml_2.3.10
#> [19] httpuv_1.6.16 otel_0.2.0 DBI_1.2.3
#> [22] buildtools_1.0.0 RColorBrewer_1.1-3 Rtsne_0.17
#> [25] purrr_1.2.0 AnnotationFilter_1.35.0 RCurl_1.98-1.17
#> [28] rappdirs_0.3.3 circlize_0.4.16 ggrepel_0.9.6
#> [31] irlba_2.3.5.1 alabaster.sce_1.9.0 maketools_1.3.2
#> [34] codetools_0.2-20 DT_0.34.0 tidyselect_1.2.1
#> [37] shape_1.4.6.1 UCSC.utils_1.7.0 farver_2.1.2
#> [40] viridis_0.6.5 ScaledMatrix_1.19.0 shinyWidgets_0.9.0
#> [43] BiocFileCache_3.1.0 GenomicAlignments_1.47.0 jsonlite_2.0.0
#> [46] GetoptLong_1.0.5 BiocNeighbors_2.5.0 iterators_1.0.14
#> [49] foreach_1.5.2 tools_4.5.2 Rcpp_1.1.0
#> [52] glue_1.8.0 gridExtra_2.3 xfun_0.54
#> [55] mgcv_1.9-4 GenomeInfoDb_1.47.0 dplyr_1.1.4
#> [58] gypsum_1.7.0 shinydashboard_0.7.3 withr_3.0.2
#> [61] BiocManager_1.30.27 fastmap_1.2.0 rhdf5filters_1.23.0
#> [64] shinyjs_2.1.0 digest_0.6.38 rsvd_1.0.5
#> [67] R6_2.6.1 mime_0.13 colorspace_2.1-2
#> [70] listviewer_4.0.0 RSQLite_2.4.4 cigarillo_1.1.0
#> [73] rtracklayer_1.69.1 httr_1.4.7 htmlwidgets_1.6.4
#> [76] pkgconfig_2.0.3 gtable_0.3.6 blob_1.2.4
#> [79] ComplexHeatmap_2.27.0 S7_0.2.1 XVector_0.51.0
#> [82] sys_3.4.3 htmltools_0.5.8.1 ProtGenerics_1.43.0
#> [85] rintrojs_0.3.4 clue_0.3-66 scales_1.4.0
#> [88] alabaster.matrix_1.9.0 png_0.1-8 knitr_1.50
#> [91] rjson_0.2.23 nlme_3.1-168 curl_7.0.0
#> [94] shinyAce_0.4.4 cachem_1.1.0 GlobalOptions_0.1.2
#> [97] BiocVersion_3.23.1 parallel_4.5.2 miniUI_0.1.2
#> [100] vipor_0.4.7 AnnotationDbi_1.73.0 restfulr_0.0.16
#> [103] pillar_1.11.1 grid_4.5.2 alabaster.schemas_1.11.0
#> [106] vctrs_0.6.5 promises_1.5.0 BiocSingular_1.27.0
#> [109] dbplyr_2.5.1 beachmat_2.27.0 xtable_1.8-4
#> [112] cluster_2.1.8.1 beeswarm_0.4.0 evaluate_1.0.5
#> [115] GenomicFeatures_1.63.1 cli_3.6.5 compiler_4.5.2
#> [118] Rsamtools_2.27.0 rlang_1.1.6 crayon_1.5.3
#> [121] ggbeeswarm_0.7.2 viridisLite_0.4.2 alabaster.se_1.9.0
#> [124] BiocParallel_1.45.0 Biostrings_2.79.2 lazyeval_0.2.2
#> [127] colourpicker_1.3.0 ExperimentHub_3.1.0 bit64_4.6.0-1
#> [130] Rhdf5lib_1.33.0 KEGGREST_1.51.0 shiny_1.11.1
#> [133] alabaster.ranges_1.9.1 AnnotationHub_4.1.0 fontawesome_0.5.3
#> [136] igraph_2.2.1 memoise_2.0.1 bslib_0.9.0
#> [139] bit_4.6.0
# devtools::session_info()Needless to say, these functions should not be used as shared or global colormaps.↩︎