## ----global_settings, echo = FALSE, message = FALSE-----------------------------------------------
library(markdown)
options(markdown.HTML.options = c(options('markdown.HTML.options')[[1]], "toc"))

library(knitr)
knitr::opts_chunk$set(
    error = FALSE,
    tidy  = FALSE,
    message = FALSE,
    fig.align = "center",
    fig.width = 5,
    fig.height = 5)
options(markdown.HTML.stylesheet = "custom.css")

options(width = 100)

## ----heatmap_list_default, fig.width = 10---------------------------------------------------------
library(ComplexHeatmap)

mat1 = matrix(rnorm(80, 2), 8, 10)
mat1 = rbind(mat1, matrix(rnorm(40, -2), 4, 10))
rownames(mat1) = paste0("R", 1:12)
colnames(mat1) = paste0("C", 1:10)

mat2 = matrix(rnorm(60, 2), 6, 10)
mat2 = rbind(mat2, matrix(rnorm(60, -2), 6, 10))
rownames(mat2) = paste0("R", 1:12)
colnames(mat2) = paste0("C", 1:10)

ht1 = Heatmap(mat1, name = "ht1")
ht2 = Heatmap(mat2, name = "ht2")
class(ht1)
class(ht2)

ht1 + ht2

## -------------------------------------------------------------------------------------------------
ht_list = ht1 + ht2
class(ht_list)

## ---- eval = FALSE--------------------------------------------------------------------------------
#  ht1 + ht1 + ht1
#  ht1 + ht_list
#  ht_list + ht1
#  ht_list + ht_list

## ---- eval = FALSE--------------------------------------------------------------------------------
#  ht_list = NULL
#  for(s in sth) {
#      ht_list = ht_list + Heatmap(...)
#  }

## ----heatmap_list_title, fig.width = 10-----------------------------------------------------------
ht1 = Heatmap(mat1, name = "ht1", row_title = "Heatmap 1", column_title = "Heatmap 1")
ht2 = Heatmap(mat2, name = "ht2", row_title = "Heatmap 2", column_title = "Heatmap 2")
ht_list = ht1 + ht2

draw(ht_list, row_title = "Two heatmaps, row title", row_title_gp = gpar(col = "red"),
    column_title = "Two heatmaps, column title", column_title_side = "bottom")

## ----heatmap_list_gap, fig.width = 10, fig.keep = "all"-------------------------------------------
draw(ht_list, gap = unit(1, "cm"))
draw(ht_list + ht_list, gap = unit(c(3, 6, 9, 0), "mm"))

## ----heatmap_list_size, fig.width = 10, fig.keep = "all"------------------------------------------
ht1 = Heatmap(mat1, name = "ht1", column_title = "Heatmap 1")
ht2 = Heatmap(mat2, name = "ht2", column_title = "Heatmap 2", width = unit(5, "cm"))
ht1 + ht2

## ----heatmap_list_relative_size, fig.width = 10, fig.keep = "all"---------------------------------
ht1 = Heatmap(mat1, name = "ht1", column_title = "Heatmap 1", width = 2)
ht2 = Heatmap(mat2, name = "ht2", column_title = "Heatmap 2", width = 1)
ht1 + ht2

## ----heatmap_list_auto_adjust, fig.width = 10, fig.keep = "all"-----------------------------------
ht1 = Heatmap(mat1, name = "ht1", column_title = "Heatmap 1", km = 2)
ht2 = Heatmap(mat2, name = "ht2", column_title = "Heatmap 2")
ht1 + ht2

# note we changed the order of `ht1` and `ht2`
draw(ht2 + ht1)

# here although `ht1` is the second heatmap, we specify `ht1` to be
# the main heatmap by explicitely setting `main_heatmap` argument
draw(ht2 + ht1, main_heatmap = "ht1")

## ----heatmap_list_auto_adjust_no_row_cluster, fig.width = 10--------------------------------------
ht1 = Heatmap(mat1, name = "ht1", column_title = "Heatmap 1", cluster_rows = FALSE)
ht2 = Heatmap(mat2, name = "ht2", column_title = "Heatmap 2")
ht1 + ht2

## ---- fig.width = 10------------------------------------------------------------------------------
ht_global_opt(heatmap_row_names_gp = gpar(fontface = "italic"), 
	          heatmap_column_names_gp = gpar(fontsize = 14))
ht1 = Heatmap(mat1, name = "ht1", column_title = "Heatmap 1")
ht2 = Heatmap(mat2, name = "ht2", column_title = "Heatmap 2")
ht1 + ht2
ht_global_opt(RESET = TRUE)

## -------------------------------------------------------------------------------------------------
names(ht_global_opt())

## -------------------------------------------------------------------------------------------------
ht_list = ht1 + ht2
row_order(ht_list)
column_order(ht_list)
row_dend(ht_list)
column_dend(ht_list)

## ---- eval = FALSE--------------------------------------------------------------------------------
#  ht_list = draw(ht1 + ht2)
#  row_order(ht_list)
#  column_order(ht_list)
#  row_dend(ht_list)
#  column_dend(ht_list)

## ---- fig.width = 8-------------------------------------------------------------------------------
split = rep(c("a", "b"), each = 6)
ht_list = Heatmap(mat1, name = "mat1", cluster_rows = FALSE, column_title = "mat1") + 
          Heatmap(mat2, name = "mat2", cluster_rows = FALSE, column_title = "mat2")
draw(ht_list, main_heatmap = "mat1", split = split)
draw(ht_list, main_heatmap = "mat2", km = 2, cluster_rows = TRUE)
draw(ht_list, cluster_rows = TRUE, main_heatmap = "mat1", show_row_dend =TRUE)
draw(ht_list, cluster_rows = TRUE, main_heatmap = "mat2", show_row_dend =TRUE)

## -------------------------------------------------------------------------------------------------
sessionInfo()