<!--
%\VignetteEngine{knitr}
%\VignetteIndexEntry{Difference to older versions}
-->


Difference to Older Versions of ComplexHeatmap Package
=================================================

**Author**: Zuguang Gu ( z.gu@dkfz.de )

**Date**: `r Sys.Date()`

**Package version**: `r installed.packages()["ComplexHeatmap", "Version"]`

---------------------------------------

<style type="text/css">
h1, h2, h3, h4, h5 {
    line-height: 120%;
}
</style>

From version 1.99.0 of **ComplexHeatmap**, there are big changes to the older versions. The major
functionalities are still the same, but it is not 100% compatible. This vignette lists the
changes between the new and old versions.

## Heatmap() function

- New arguments `column_km` and `column_split` to split heatmap by columns. The old `km` and `split`
  are renamed to `row_km` and `row_split`, although `km` and `split` are still usable.
- A new argument `border` controls the border of the heatmap body. If heatmap is split into slices,
  all the slices will have borders.
- Row title and column title allow background color by e.g. `column_title_gp = gpar(fill = ...)`.
- `cluster_rows` and `cluster_columns` also allow objects which can be converted to `dendrogram`.
- If `cluster_rows` and `cluster_columns` are provided as clustering object, dendrogram reordering
  is turned off by default.
- Add examples of how to integrate seriation.
  (https://jokergoo.github.io/ComplexHeatmap-reference/book/a-single-heatmap.html#heatmap-seriation)
- Row names and column names allow rotation by `row_names_rot` and `column_names_rot`.
- New arguments `row_labels` and `column_labels` which can be set to replace row names and column
  names on the heatmap.
- When heatmap is split and clustering is performed, there is a parent dendrogram which is
  calculated from mean values in slices and put on top of the children dendrograms. There is a dashed
  line showing the part of the parent dendrogram and emphasizing the dendrogram is combined from
  several dendrograms.
- Remove `combined_name_fun` argument and control the titles for the heatmap slices directly by
  `row_title` and `column_title`. The two arguments support a string template which is convinient to
  control the title for each slice.
  (https://jokergoo.github.io/ComplexHeatmap-reference/book/a-single-heatmap.html#titles-for-splitting)
- New argument `layer_fun` is a vectorized version of `cell_fun`. This functionality is too
  low-level and normally users will not use it.
  (https://jokergoo.github.io/ComplexHeatmap-reference/book/a-single-heatmap.html#customize-the-heatmap-body)
- New arguments `width`, `heatmap_width`, `height`, `heatmap_height` to control the size of the
  heatmap.
  (https://jokergoo.github.io/ComplexHeatmap-reference/book/a-single-heatmap.html#size-of-the-heatmap)
- New arguments `left_annotation` and `right_annotation`, which means row annotations can be components
  of the heatmap, just like column annotations.
- Remove `top_annotation_height` and `bottom_annotation_height`. The height of annotations should be
  set in `HeatmapAnnotation()` function now.

## HeatmapAnnotation() function

- All annotations have default width/height now. E.g. the column simple annotation has height of 5mm
  and the column barplot annotation has height of 1cm.
- Provide more annotation functions: `anno_empty()`, `anno_simple`, `anno_image()`, `anno_block()`,
  `anno_lines()`, `anno_joyplot()`, `anno_horizon()`, `anno_summary()`, `anno_zoom()`.
  (https://jokergoo.github.io/ComplexHeatmap-reference/book/heatmap-annotations.html)
- The size of the annotations are better to be set in the annotation functions, e.g.
  `anno_points(..., height = )`, but you can still set `annotation_height`.
- The axis for the annotations (e.g. `anno_points()`, ...) can be controlled by the `axis_param`
  argument in the annotation function.
- `anno_link()` is now renamed to `anno_mark()`. This annotation has default width and no need to
  manually calcualte.
- `anno_text()`: the size of the annotation is automatically calculated.
- By default, the annotation names and axes are drawn and the space for them are also taken into
  account for the layout of the final heatmap.
- Two `HeatmapAnnotation` objects can be added as a single `HeatmapAnnotation` object by `c()`.
  (https://jokergoo.github.io/ComplexHeatmap-reference/book/heatmap-annotations.html#heatmap-annotation-utility-function)
- No need to use `row_anno_*()` functions, now `anno_*()` functions can automatically check whether
  they are in column annotations or row annotations.

## A list of heatmaps

- Heatmaps and annotations can be concatenated vertically by `%v%`.
  (https://jokergoo.github.io/ComplexHeatmap-reference/book/a-list-of-heatmaps.html#vertical-concatenation)
- More arguments for the main heatmap can be controlled directly in `draw()`.
  (https://jokergoo.github.io/ComplexHeatmap-reference/book/a-list-of-heatmaps.html#control-main-heatmap-in-draw-function)
- Global options can be temporarily set in `draw()`. (https://jokergoo.github.io/ComplexHeatmap-reference/book/a-list-of-heatmaps.html#change-parameters-globally, the last paragraph.)
- Annotations and column names are nicely adjusted.
  (https://jokergoo.github.io/ComplexHeatmap-reference/book/a-list-of-heatmaps.html#annotations-as-components-are-adjusted)

## Legends

- Legends are re-implemented as a `gTree` object internally. `Legend()` and `packLegend()` all
  returns a `Legends` object. This object can be treated as a single graphic element and can be drawn by
  specifying the positions on the viewport. (https://jokergoo.github.io/ComplexHeatmap-reference/book/legends.html)
- Positions of legend labels are automatically adjusted if they overlap.
- A list of legends are automatically wrapped into multiple columns or rows if they are too long and
  exceed the plotting region.

## oncoPrint() function

- It automatially tests whether functions in `alter_fun` are vectorized.
- The oncoPrint barplot annotations are now controlled by `anno_oncoprint_barplot()` and they are
  basically normal heatmap annotations. Also axis is controlled in `anno_oncoprint_barplot()`.
- `barplot_ignore` is removed and the subset of alterations in directly controlled in
  `anno_oncoprint_barplot()`.
- Similar as `Heatmap()`, all the argument related to the size of annotations are removed and they
  should be set directly in `HeatmapAnnotation()` or `anno_oncoprint_barplot()`.
- New arguments `remove_empty_rows` and `remove_empty_columns`. If the number of rows and columns
  gets smaller, all the oncoPrint components (e.g. row names, annotations) will be adjusted as well.
- `oncoPrint()` now returns a `Heatmap` object which can be concatenated to other
  heatmaps/annotations horizontally or vertically.

## densityHeatmap() function

- Columns can be clustered by the Kolmogorov-Smirnov distance between distributions.
- `densityHeatmap()` returns a vertical heatmap that more heatmaps and annotations can concatenate
  to it vertically.

## UpSet() function
- Add a new `UpSet()` function to make UpSet plots and can be concatenated to other heatmaps/annotations. (https://jokergoo.github.io/ComplexHeatmap-reference/book/upset-plot.html)