In the interactive heatmap produced by InteractiveComplexHeatmap package,
the sub-heatmap is just a zooming of the main heatmap, which means, if
cell_fun
or layer_fun
is set in Heatmap()
, both main heatmap and
sub-heatmap will execute it. cell_fun
and layer_fun
provides a way to
customize the heatmap cells, but when the main heatmap is huge, adding more
graphics via cell_fun
/layer_fun
apparently is not a good idea. Users may
want to suppress cell_fun
/layer_fun
(or just draw very simple graphics
which will not disturb the reading of the heatmap) in the main heatmap, while only to execute them in
the sub-heatmap.
Now in InteractiveComplexHeatmap, there is a new function is_in_sub_heatmap()
which
tells whether the current environment is in main heatmap or in the sub heatmap. This
function can be used inside cell_fun
/layer_fun
so that users can decide which graphics
are only drawn for sub-heatmaps.
In the following example, I defined a cell_fun
which draws cells as round rectangles, and only in the sub-heatmap,
the values in the matrix are added as text labels.
library(InteractiveComplexHeatmap)
library(ComplexHeatmap)
m = matrix(rnorm(100), 10)
ht = Heatmap(m, rect_gp = gpar(type = "none"),
show_row_dend = FALSE, show_column_dend = FALSE,
cell_fun = function(j, i, x, y, w, h, fill) {
grid.roundrect(x, y, w, h, r = unit(0.2, "snpc"),
gp = gpar(col = "white", fill = fill, lwd = 2))
if(is_in_sub_heatmap()) {
grid.text(round(m[i, j], 1), x, y)
}
})
htShiny(ht)