Get colors for your heatmap annotation
Published:
This post will show how to configure quickly the colors for the annotation of rows/columns that go on top or on the side of a heatmap.
I normally use pheatmap a lot. Recently I discovered ComplexHeatmap. In both cases I spend always sometime changing the colors of the annotations. I ended up coding a function inside my package DEGreport to do that.
Given a data.frame with metadata data information will do:
- white-black scale for numerical variables
 - blue-orange for categorical values with only two categories
 Set2palette for categorical values with more than two categories
All three color sets can be changed using the parameters function.
library(DEGreport)
library(stemHypoxia)
data(stemHypoxia)
I am going to use this stemcell experiment dataset I found randomly in Bioconductor page.
exp = as.matrix(M[,3:30])
rownames(exp) = M[,2]
rownames(design) = colnames(exp)
design = design[,c(1:2)]
design$time = as.factor(design$time)
I’ll find the most variable genes.
most_variable = names(tail(sort(apply(exp, 1, sd)), 1000))
design$mean_gene = colMeans(exp[most_variable,])
And we can plot the heatmap with new colors with need to specify each variable at a time.
library(pheatmap)
pheatmap(exp[most_variable,], scale = "row", show_rownames = FALSE,
         annotation_col = design,
         annotation_colors = degColors(design))

If you use ComplexHeatmap you can activate col_fun = TRUE to get it working.
- R Session
 
devtools::session_info()
## Warning: 'DESCRIPTION' file has an 'Encoding' field and re-encoding is not
## possible
## Session info -------------------------------------------------------------
##  setting  value
##  version  R version 3.5.1 (2018-07-02)
##  system   x86_64, darwin15.6.0
##  ui       X11
##  language (EN)
##  collate  en_US.UTF-8
##  tz       America/New_York
##  date     2018-09-21
## Packages -----------------------------------------------------------------
##  package              * version   date       source
##  acepack                1.4.1     2016-10-29 cran (@1.4.1)
##  annotate               1.58.0    2018-05-01 cran (@1.58.0)
##  AnnotationDbi          1.42.1    2018-05-08 Bioconductor
##  assertthat             0.2.0     2017-04-11 CRAN (R 3.5.0)
##  backports              1.1.2     2017-12-13 CRAN (R 3.5.0)
##  base                 * 3.5.1     2018-07-05 local
##  base64enc              0.1-3     2015-07-28 CRAN (R 3.5.0)
##  bindr                  0.1.1     2018-03-13 CRAN (R 3.5.0)
##  bindrcpp               0.2.2     2018-03-29 CRAN (R 3.5.0)
##  Biobase                2.40.0    2018-05-01 Bioconductor
##  BiocGenerics           0.26.0    2018-05-01 Bioconductor
##  BiocParallel           1.14.2    2018-07-08 cran (@1.14.2)
##  bit                    1.1-14    2018-05-29 CRAN (R 3.5.0)
##  bit64                  0.9-7     2017-05-08 CRAN (R 3.5.0)
##  bitops                 1.0-6     2013-08-17 cran (@1.0-6)
##  blob                   1.1.1     2018-03-25 CRAN (R 3.5.0)
##  broom                  0.5.0     2018-07-17 CRAN (R 3.5.0)
##  checkmate              1.8.5     2017-10-24 cran (@1.8.5)
##  circlize               0.4.4     2018-06-10 cran (@0.4.4)
##  cluster                2.0.7-1   2018-04-13 CRAN (R 3.5.1)
##  colorspace             1.3-2     2016-12-14 CRAN (R 3.5.0)
##  compiler               3.5.1     2018-07-05 local
##  ComplexHeatmap         1.18.1    2018-06-19 cran (@1.18.1)
##  ConsensusClusterPlus   1.44.0    2018-05-01 cran (@1.44.0)
##  cowplot                0.9.3     2018-07-15 cran (@0.9.3)
##  crayon                 1.3.4     2017-09-16 CRAN (R 3.5.0)
##  data.table             1.11.4    2018-05-27 cran (@1.11.4)
##  datasets             * 3.5.1     2018-07-05 local
##  DBI                    1.0.0     2018-05-02 CRAN (R 3.5.0)
##  DEGreport            * 1.17.5    2018-09-04 local (lpantano/DEGreport@NA)
##  DelayedArray           0.6.5     2018-08-15 cran (@0.6.5)
##  DESeq2                 1.20.0    2018-05-01 Bioconductor
##  devtools               1.13.6    2018-06-27 CRAN (R 3.5.0)
##  digest                 0.6.16    2018-08-22 CRAN (R 3.5.0)
##  dplyr                  0.7.6     2018-06-29 CRAN (R 3.5.1)
##  edgeR                  3.22.3    2018-06-21 cran (@3.22.3)
##  evaluate               0.11      2018-07-17 CRAN (R 3.5.0)
##  foreign                0.8-71    2018-07-20 CRAN (R 3.5.0)
##  Formula                1.2-3     2018-05-03 cran (@1.2-3)
##  genefilter             1.62.0    2018-05-01 cran (@1.62.0)
##  geneplotter            1.58.0    2018-05-01 cran (@1.58.0)
##  GenomeInfoDb           1.16.0    2018-05-01 cran (@1.16.0)
##  GenomeInfoDbData       1.1.0     2018-08-31 Bioconductor
##  GenomicRanges          1.32.6    2018-07-20 cran (@1.32.6)
##  GetoptLong             0.1.7     2018-06-10 cran (@0.1.7)
##  ggdendro               0.1-20    2016-04-27 cran (@0.1-20)
##  ggplot2                3.0.0     2018-07-03 CRAN (R 3.5.0)
##  ggrepel                0.8.0     2018-05-09 cran (@0.8.0)
##  GlobalOptions          0.1.0     2018-06-09 cran (@0.1.0)
##  glue                   1.3.0     2018-07-17 CRAN (R 3.5.0)
##  graphics             * 3.5.1     2018-07-05 local
##  grDevices            * 3.5.1     2018-07-05 local
##  grid                   3.5.1     2018-07-05 local
##  gridExtra              2.3       2017-09-09 cran (@2.3)
##  gtable                 0.2.0     2016-02-26 CRAN (R 3.5.0)
##  Hmisc                  4.1-1     2018-01-03 cran (@4.1-1)
##  htmlTable              1.12      2018-05-26 cran (@1.12)
##  htmltools              0.3.6     2017-04-28 CRAN (R 3.5.0)
##  htmlwidgets            1.2       2018-04-19 cran (@1.2)
##  IRanges                2.14.11   2018-08-24 Bioconductor
##  knitr                  1.20      2018-02-20 CRAN (R 3.5.0)
##  lasso2                 1.2-19    2014-05-31 cran (@1.2-19)
##  lattice                0.20-35   2017-03-25 CRAN (R 3.5.1)
##  latticeExtra           0.6-28    2016-02-09 cran (@0.6-28)
##  lazyeval               0.2.1     2017-10-29 CRAN (R 3.5.0)
##  limma                  3.36.3    2018-08-25 cran (@3.36.3)
##  locfit                 1.5-9.1   2013-04-20 cran (@1.5-9.1)
##  logging                0.7-103   2013-04-12 cran (@0.7-103)
##  magrittr               1.5       2014-11-22 CRAN (R 3.5.0)
##  MASS                   7.3-50    2018-04-30 CRAN (R 3.5.1)
##  Matrix                 1.2-14    2018-04-13 CRAN (R 3.5.1)
##  matrixStats            0.54.0    2018-07-23 cran (@0.54.0)
##  memoise                1.1.0     2017-04-21 CRAN (R 3.5.0)
##  methods              * 3.5.1     2018-07-05 local
##  mnormt                 1.5-5     2016-10-15 cran (@1.5-5)
##  munsell                0.5.0     2018-06-12 CRAN (R 3.5.0)
##  nlme                   3.1-137   2018-04-07 CRAN (R 3.5.1)
##  nnet                   7.3-12    2016-02-02 CRAN (R 3.5.1)
##  Nozzle.R1              1.1-1     2013-05-15 cran (@1.1-1)
##  parallel               3.5.1     2018-07-05 local
##  pheatmap             * 1.0.10    2018-05-19 CRAN (R 3.5.0)
##  pillar                 1.3.0     2018-07-14 CRAN (R 3.5.0)
##  pkgconfig              2.0.2     2018-08-16 CRAN (R 3.5.0)
##  plyr                   1.8.4     2016-06-08 CRAN (R 3.5.0)
##  psych                  1.8.4     2018-05-06 cran (@1.8.4)
##  purrr                  0.2.5     2018-05-29 CRAN (R 3.5.0)
##  R6                     2.2.2     2017-06-17 CRAN (R 3.5.0)
##  RColorBrewer           1.1-2     2014-12-07 CRAN (R 3.5.0)
##  Rcpp                   0.12.18   2018-07-23 CRAN (R 3.5.0)
##  RCurl                  1.95-4.11 2018-07-15 cran (@1.95-4.)
##  reshape                0.8.7     2017-08-06 cran (@0.8.7)
##  rjson                  0.2.20    2018-06-08 cran (@0.2.20)
##  rlang                  0.2.2     2018-08-16 CRAN (R 3.5.0)
##  rmarkdown              1.10      2018-06-11 CRAN (R 3.5.0)
##  rpart                  4.1-13    2018-02-23 CRAN (R 3.5.1)
##  rprojroot              1.3-2     2018-01-03 CRAN (R 3.5.0)
##  RSQLite                2.1.1     2018-05-06 CRAN (R 3.5.0)
##  rstudioapi             0.7       2017-09-07 CRAN (R 3.5.0)
##  S4Vectors              0.18.3    2018-06-08 Bioconductor
##  scales                 1.0.0     2018-08-09 CRAN (R 3.5.0)
##  shape                  1.4.4     2018-02-07 cran (@1.4.4)
##  splines                3.5.1     2018-07-05 local
##  stats                * 3.5.1     2018-07-05 local
##  stats4                 3.5.1     2018-07-05 local
##  stemHypoxia          * 1.16.0    2018-09-21 Bioconductor
##  stringi                1.2.4     2018-07-20 CRAN (R 3.5.0)
##  stringr                1.3.1     2018-05-10 CRAN (R 3.5.0)
##  SummarizedExperiment   1.10.1    2018-05-11 Bioconductor
##  survival               2.42-6    2018-07-13 CRAN (R 3.5.0)
##  tibble                 1.4.2     2018-01-22 CRAN (R 3.5.0)
##  tidyr                  0.8.1     2018-05-18 CRAN (R 3.5.0)
##  tidyselect             0.2.4     2018-02-26 CRAN (R 3.5.0)
##  tools                  3.5.1     2018-07-05 local
##  utils                * 3.5.1     2018-07-05 local
##  withr                  2.1.2     2018-03-15 CRAN (R 3.5.0)
##  XML                    3.98-1.16 2018-08-19 cran (@3.98-1.)
##  xtable                 1.8-3     2018-08-29 cran (@1.8-3)
##  XVector                0.20.0    2018-05-01 cran (@0.20.0)
##  yaml                   2.2.0     2018-07-25 CRAN (R 3.5.0)
##  zlibbioc               1.26.0    2018-05-01 cran (@1.26.0)