Changes in version 0.4.15
-----------------------------------------------------------------------

* low-level graphics functions won't change the index of sector and track.
* `colorRamp2()`: add `hcl_palette` argument.
* `highlight.sectors()`: argument `padding` supports to wrap the vector with `I()`.
* fixed a bug of wrong calculation of label positions in `circos.genomicLabels()`.


Changes in version 0.4.14
-----------------------------------------------------------------------

* `circos.genomicTrackPlotRegion()`: add `na.rm = TRUE` when using `range()`.
* fixed a bug of `na.col` in `circos.heatmap()`.
* improved default order of link end when duplicated rows exist in the data frame.
* `circos.heatmap()`: add `cell.border`, `cell.lty` and `cell.lwd` arguments.
* add `circos.initializeCircularGenome()`.
* `chordDiagram()`: `link.sort` allows to sort links based on the original orders 
   in the input data frame.
* label facing is correct now for y-axis when circos.par$xaxis.clock.wise is FALSE.
* `rand_color()`: add a new argument `friendly` that generate eye-friendly random colors.
* `chordDiagram()`: fixed a bug when a sector have all zero values and after scaling
  they changed to NA.

Changes in version 0.4.13
-----------------------------------------------------------------------

* `circos.link()`: add offset when testing whether the link is out of the sector.

Changes in version 0.4.12
-----------------------------------------------------------------------
* `smartAlign()`: improved boxes overlapping
* `circos.heatmap()`: automatically convert the input to a matrix if 
  it is a data frame
* now validate the regions to check whether the regions are exceeding 
  the chromosomes.
* `circos.link()`: add a new `inverse` argument to control whether the link
  is inversed or not.
* `circos.genomicLabels()`: replace `side` argument with `labels.side`.
* `circos.points()`, `circos.lines()`, `circos.text()` allow argument `x` to be
  a two-column matrix.
* add `arrange_links_evenly()` function.
* add `circos.connect()` function.
* `circos.heatmap()`: argument `cluster` can be a clustering object.
* `circos.heatmap()`: add `cell_width` to control the relative width of heatmap cells.
* add `circos.labels()`.
* `chordDiagram()`: bars are drawn according to the visibility of links.

Changes in version 0.4.11
-----------------------------------------------------------------------
* `chordDiagram()`: add `link.auto` argument
* `chordDiagram()`: add `link.target.prop` and `target.prop.height` arguments
* `circos.par()`: add `circle.margin` option
* `circos.genomicLabels()`: fixed a bug when `direction = "outside"`
* add `xaxis.clock.wise` option in `circos.par()`
* `chordDiagram()`: now the scaling is properly applied.
* `chordDiagram()`: link positions are optimized so they have minimal intersections.
   `link.auto` argument is ignored and removed.
* `circos.dendrogram()`: support arbitary numbers of branches on each node.
* all functions with `factors` with arguments change to `sectors`.

Changes in version 0.4.10
-----------------------------------------------------------------------
* `highlight.sector()`: fixed a bug when circos.par("clock.wise" = FALSE)
* `circos.genomicLink()`: input data frames can have 2 columns. In this case 
   the start and the end positions of each region are the same.
* `circos.circos.trackPlotRegion()`: fixed a bug that sector index was wrongly
  assigned.
* `get.cell.meta.data()`: add `cell.width` and `cell.height` arguments.
* `circos.genomicTrackPlotRegion()`: when input is a data frame list and column.index
   is a vector, reduce the one-column data frame to a vector.
* add `add.track.meta.data()` and `add.sector.meta.data()` too add user-defined cell meta data.
* add `circos.heatmap()` to draw multi-track heatmaps.
* add `circos.barplot()`, `circos.boxplot()` and `circos.violin()`.
* sector index are all enforced to be character.
* `circos.nested()`: now the graphic parameters are reordered accordingly as the `correspondance`.
* add `mm_x()`, `mm_y()`, `mm_h()`, `cm_x()`, `cm_y()`, `cm_h()`, `inches_x()`, `inches_y()`, `inches_h()`
  functions
* `circos.initialize():` if `gap.degree`/`gap.after` is set a named vector, the order of 
  these two options are adjusted to the real sector order.
* add `set_track_gap()` function.
* `circos.link()`: add `reduce_to_mid_line` argument.
* `chordDiagram()`: add `group` argument.

Changes in version 0.4.9
-----------------------------------------------------------------------
* `chordDiagram()`: fixed a bug when `link.overlap = TRUE` for sparse matrices.
* `circos.rect()`: add `rot` argument.
* add `circos.triangle()`.
* all examples are included in R source code files
* `circos.genomicHeatmap()`: `connection_height` can be set to `NULL` to remove the
   connection lines.
* `genomicDensity()`/`circos.genomicDensity()`: add a new `count_by` argument so that
   the overlap can be calculated as how many regions overlap to the windows.
* `circos.trackPlotRegion()`: cells in all sectors are plotted if `fa` does not provide complete
  set of categories.
* `circos.initialize()`: give warnings if `fa` is in numeric mode.
* `circos.track()`/`circos.genomicTrack()`: gives error when the panel function was specified without
  explicitly by the name `panel.fun`.
* `chordDiagram()`: if the input is a data frame, it allows the data frame to have two numeric columns
  and the link ends are drawn wiht unequal width.

Changes in version 0.4.8
-----------------------------------------------------------------------
* add `validate_regions()` to check the end positions and start positions.
* `colorRamp2()`: fixed a bug when the color mapping function returns RGB matrix.
* `circos.genomicHeatmap()`: add `na_col` argument.
* `chordDiagram()`: add `link.overlap` argument.

Changes in version 0.4.7
-----------------------------------------------------------------------
* fixed a bug that the vertical line was wrongly put for `circos.yaxis()`.
* validate input if it is should be a data frame.
* `colorRamp2()`: add HLS colorspace
* add `major.at` and `labels` arguments to `circos.genomicAxis()`.
* circos.initializeWithIdeogram(): manually select chromosomes for the common species
* `chordDiagram()`: fixed a bug that after reducing the matrix/data frame
  by `reduce`, there might be sectors with zero width.
* optimized `circos.nested()`
* `colorRamp2()`: check NA values

Changes in version 0.4.6
------------------------------------------------------------------------
* smartAlign(): the order of values won't affect the realignment now.
* `circos.rect()`, `circos.segments()`, `circos.points()`, `circos.text()`:
  x and y are recycled if the length of the variable is 1.
* fixed a bug of the position of vertical line in `circos.yaxis()`
* add `facing` and `niceFacing` to `circos.genomicLabels()`
* `posTransform.text()`: linking lines will not be overlapping anymore.

Changes in version 0.4.5
------------------------------------------------------------------------
* vertical lines added for y-axis.
* add `axis.labels.cex` and `labels.cex` in `circos.genomicInitialize()`.
* remove `lwd` in `circos.genomicRect()` because `lwd` is not allowed to be vector.
* fixed a bug when self.link = 1 in chordDiagram()
* add `scale` in chordDiagram()
* `circos.initialize()`: convert xlim and x to numeric
* `colorRamp2()` is faster now.
* add `circos.genomicAxis()`.
* add `calc_gap()`.
* `chordDiagram()`: consider tibble format as input.

Changes in version 0.4.4
-------------------------------------------------------------------------

* update denpendency of GlobalOptions package
* `genomicDensity()`: add `chr.len` argument.

Changes in version 0.4.3
--------------------------------------------------------------------------

* `circos.trackHist()`: add `area` argument to add filled color under density lines.
* `getColorInfo()`: use `ls(envir)` to get the names of variables in the environment.
* `circos.arrows`: add instructions of making reverse clockwise arrows.

Changes in version 0.4.2
---------------------------------------------------------------------------

* add startup message
* add `xmax` argument in `chordDiagram()`
* first column is refactorized in `circos.initialize()`
* add names for CELL_META
* add `labels.pos.adjust` in `circos.axis()`
* add `fontsize()` function
* `circos.nested()`: check whether sector order in the two circular plots are consistent
* `getQuadraticPoints()`: add tiny offset when the curve is actually a straight line

Changes in version 0.4.1
---------------------------------------------------------------------------

* add `circos.raster()`
* add `circos.arrow()`
* re-implement `rand_color()`
* support `col` in `circos.axis()`
* `circos.genomicLabels()`: regions are automatically sorted in advance

Changes in version 0.4.0
----------------------------------------------------------------------------

* add `link.visible` argument in `chordDiagram()`
* add cytoband files and chromInfo files for a list of species locally
* add a new vignette "Add legends to circlize"
* add a new function `convert_*()` which convert an absolute unit to
  measurement in different coordinates
* enforce asp = 1 when calling plot.default
* length of axes ticks are set to 2mm by default
* in axis, the first axis label is shifted if it is exceed the axis and
  so is for the last axis label.
* text.vjust accepts strings as "2mm", "-2.1 cm" to represent offsets
* `circos.segments()`: graphic parameters can be set as vectors
* add `circos.genomicIdeogram()`, `circos.genomicHeatmap()`, `circos.genomicLabels()`
* add `circos.nestes()`
* vignette has been moved to https://jokergoo.github.io/circlize_book/book/index.html
* add `set.current.cell()`
* add `h.ratio` argument in `circos.link()`

Changes in version 0.3.10
----------------------------------------------------------------------------

* `chordDiagram()`: fixed a bug when the input matrix is stored as a data frame
* `rainfallTransform()`: add "left" and "right" modes, and now the row order of
   the output data frame is as same as the input one.
* `circos.genomicInitialize()`: it can only plot axes now.
* `posTransform.text()`: add `extend` option to control the extension of chromsomes
  to allow to put more labels
* `ciros.points()`: add `bg` option to control background color

Changes in version 0.3.9
----------------------------------------------------------------------------

* `chordDiagramFromDataFrame()`: now recognize a `rank` column which defines
  the order of adding links

Changes in version 0.3.8
----------------------------------------------------------------------------

* chordDiagram(): if not all sectors are specified in grid.col, remaining will
  be filled by random colors
* if `ylim` has same values for upper and lower bound, throw errors.

Changes in version 0.3.7
----------------------------------------------------------------------------

* chordDiagram() now returns a data frame which contains positions of all links
* chordDiagram() track.margin is also taken into settings of preAllocateTracks
* chordDiagram(): link.sort adds a new option: "overall" which sort links
  regardless of rows or columns
* chordDiagram(): add `link.largest.ontop` which controls the order of adding links

Changes in version 0.3.6
----------------------------------------------------------------------------

* positions of arrows in chordDiagram() have been adjusted.
* fixed a bug that negative value was not shown
* circos.initialize: if `factors` are unique and is a vector, the order of sectors
  will be the same as `factors`.
* `highlight.sector`: text are now in correct position if sectors are over theta = 0

Changes in version 0.3.5
----------------------------------------------------------------------------

* `chordDiagram()`: if the corresponding value is zero, nothing happens.
* border of links are same as filled by default
* explicitely put all arguments in `chordDiagram()` instead of just using `...`
* `adj` in `circos.text()` can also adjust text rotations.
* 'circos.genomicInitialize()': gap between labels and ideograms is adjusted
  if there is no axis

Changes in version 0.3.4
----------------------------------------------------------------------------

* `circos.genomicLink()`: ordering is cancled when normalizing the data frames
* export `smartAlign()`

Changes in version 0.3.3
----------------------------------------------------------------------------

* `rainfallTransform()` and `genomicDensity()`: can be applied on the bed-format
  data frame directly.
* add `col2rgb()` which transforms back to the original value based on the color
  mapping function.
* add `circos.yaxis()`

Changes in version 0.3.2
-----------------------------------------------------------------------------

* `chrodDiagram`: add warning if users use data frame as ajacency matrix
* `circos.genomicTrackPlotRegion`: data frame will be sorted


Changes in version 0.3.1
-----------------------------------------------------------------------------

* fixed a bug for `chordDiagramFromDataFrame` when there is the third column in the data frame
* `colorRamp2`: colors are interpolated linearly in Lab color space
* `chordDiagram`: directional, direction.type and diffHeight can also be vector

Changes in version 0.3.0
-----------------------------------------------------------------------------

* `chordDiagramFromMatrix`: automatically replace NA to 0 in the input matrix
* add `chordDiagramFromMatrix` and `chordDiagramFromDataFrame`
* by default there is axis on chord diagram
* add `quadratic.bezier.length` that calculates the approximate length of bezier curve
* normalize link-related functions to make sure the direction is always from
  the first argument to the second argument, reverse clockwise.

Changes in version 0.2.5
-----------------------------------------------------------------------------

* `circos.rect` and `circos.polygon` are vectorized
* `circos.dendrogram`: supports graphical settings for nodes
* `circos.link`: support 'big.arrow' mode for links
* `circos.text`: graphical settings are subsetted correctly in `niceFacing` is set
* add shortcut functions: `circos.track`, `circos.update` and `circos.genomicTrack`
* add `normalizeChordDiagramGap`
* fixed type in `get.cell.meta.data`

Changes in version 0.2.4
------------------------------------------------------------------------------

* 'chrodDiagram`: If graphic parameters for links are different, the value can be
   specified as a three-column data frame.
* `chordDiagram`: arrows can be used to identify directions
* ·circos.link`: arrows can be used to identify directions
* `chordDiagram`: width of self-links are not duplicated.
* `circos.link`: if two roots for a link overlaps, the link is de-generated
  as an area with a quadratic curve and an arc.
* add `circos.dendrogram` which draw dendrograms (dendrogram can be rendered by
  `dendextend` package)

Changes in version 0.2.3
------------------------------------------------------------------------------

* add `link.order` argument in `chordDiagram` to control order of links on
  sectors
* add `highlight.sector`
* `chromosome.index` can set the order of chromosomes
* add `read.chromInfo()` to read chromInfo file from UCSC
* if downloading cytoband file failed, try to download chromInfo file
* `chromosome.index` can be set in `read.cytoband()` and `read.chromInfo()`

Changes in version 0.2.2
------------------------------------------------------------------------------

* change `.onLoad` to `setLoadActions`
* `circos.clear`: __tempdir__ will not be reset

Changes in version 0.2.1
------------------------------------------------------------------------------

* If par("mar") is using default, it will be changed to par(mar = c(1, 1, 1, 1))
  internally and will be recovered after calling circos.clear()
* `circos.text`: add two options ('bending.inside' which is identical to original
  'bending' and 'bending.outside'), both support `niceFacing`
* circos.par('__tempdir__') is initialized by `tempdir()`
* `.get_color`: there will be no negative value due to 0.000 - 0.000
* `chordDiagram`: `grid.col` is correctly reduced if rownames and colnames overlap
* `circos.text`: `font` is passed to `text` function
* `colorRamp2`: returned function has an attribute: `breaks`
* `chordDiagram`: assign same names for rows and columns if the input matrix
  is specified symmetric while has no names
* `chordDiagram`: also check rownames and colnames if the matrix is specified as
  symmetric.
* don't remove temporary folder
* `value` can be scalar or vector in `circos.genomicPoints`, `circos.genomicLines`, ...

Changes in version 0.2.0
------------------------------------------------------------------------------

* `draw.sector` is modified, now accepts an argument `clock.wise` to control
  the direction of sectors.
* `highlight.chromosome` can highlight more than one chromosomes now.
* vignettes are rendered by `knitr`
* set default transparency to 0.5 in `chordDiagram`
* `circlize` returns value when track.index == 0
* fixed a bug when text facing is 'bending', all text are plotted in one cell
* different colors for each rows can be set to `circos.genomicLines` if
  type %in% c("segment", "h")
* pre-allocate the matrix in `.get_color`

Changes in version 0.1.3
------------------------------------------------------------------------------

* add `jitter` for adding points under `stack` mode
* value in `panel.fun` can be selected by character index
* change default temporary dir to `tempdir()`

Changes in version 0.1.3
------------------------------------------------------------------------------

* temporary add dependency of `methods` until bugs in `GlobalOptions` fixed
* add `reduce` argument in `chordDiagram` to control whether to remove tiny categories
* add `species` argument in `generateRandomBed`
* change use of posTransform.text
* add names for `chr.len` in `read.cytoband`
* cytoband files are cached
* `row.col`, `column.col`, `col`, `grid.col` and circos.par('gap.degree') will
  also be reduced if the matrix is reduced

Changes in version 0.1.2
------------------------------------------------------------------------------

* global options are controlled by `GlobalOptions` package
* set `par("lend")` and `par("ljoin")` to their default values.
* add more example codes in genomic_plot vignette

Changes in version 0.1.1
------------------------------------------------------------------------------

* fixed the bug that if start position is not zero when calling `circos.genomicIntialize`,
  ``major.at`` is wrongly calculated.

Changes in version 0.1.0
------------------------------------------------------------------------------

* height(h) and shape(w) can be set for Bezier curve (in `circos.link`)
* add examples in man/
* add ``fromRows`` options in `chordDiagram` to control the direction of links
* Now the ``major.by`` are the same in all sectors
* define ``min.data`` and ``max.data`` in internal variable ``SECTOR.DATA``
* check that sector names cannot be empty strings ("")
* check whether circos plot has been initialized when calling `circos.trackPlotRegion`
* add ``niceFacing`` in `circos.text` to make the facing more human easy
* height of ideogram and annotation track in `circos.initializeWithIdeogram` and `circos.genomicInitialize` can be set
* some example code in examples/vignettes has been changed according to changes in the package source code
* add `posTransform.text` which can smartly put text on the circle
* ``track.margin`` and ``cell.padding`` can be set in `circos.trackPlotRegion` as a local setting

Changes in version 0.0.9
------------------------------------------------------------------------------

* links are now implemented by Bezier curve
* baseline can be set when ``type == "h"`` `in circos.lines`
* add a new function `chordDiagram` which support chord diagram
* add `facing` argument to replace `direction` in `circos.text`
* `circos.trackPlotRegion` can be used to update a track without re-setting ylim
* move demo to https://jokergoo.github.io/circlize
* re-implement `colorRamp2`

Changes in version 0.0.8
------------------------------------------------------------------------------

* axes labels will not draw when setting labels = FALSE
* add many functions supporting genomic visualization
* add a new vignette to show how to plot genomic circos plot with new functions
* add `circos.info`

Changes in version 0.0.7
------------------------------------------------------------------------------

* add an example in demo codes
* improved vignettes

Change in version 0.0.6
------------------------------------------------------------------------------

* order will not change in `circos.trackPlotRegion` when not specifying `factors`, bug fixed
* add an example in 'draw relation' vignette
* add a new vignette focusing on phylogenetic tree
* support directly downloading cytoBand file from UCSC

Changes in version 0.0.5
------------------------------------------------------------------------------

* support self-define width of sectors when initializing sectors
* add simple functions to read and manuplate cytoband file
* add several new figures in the vignettes and vignettes have been improved.
* ``cell.padding`` in `circos.par` now using degree as its measurement.
* ``track.margin`` in `circos.par` now using percentage of radius as its measurement.

Changes in version 0.0.4
------------------------------------------------------------------------------

* number of points to simulate quadratic curves decreased
* labels on axis in `circos.initializeWithIdeogram` is now 'vertical_right' by default
* size of the vignettes reduced
* add example of drawing heatmap and cluster dendrogram in the main vignette
* add example of drawing error area of lines by `circos.polygon`
* vignette improved
* ``gap.degree`` in `circos.par` can be a vector which means different degrees for gaps can be set
* export core function `circlize` now
* track.margin now is in correct order
* links are optimized (although not so perfect)
* no point overflow warnings when drawing axes

Changes in version 0.0.3
------------------------------------------------------------------------------

* vignettes has been improved
* ``xplot`` in `get.cell.meta.data` is now corresponding to the data direction in the cell
* number of points to draw links decreased.
* `get.cell.meta.data` can provide more meta data for a cell
* start degree and end degree now consistent with the data axis.
* the first sector is drawn first now.
* add `draw.sector`

Changes in version 0.0.2
------------------------------------------------------------------------------

* add `draw.sector` so it would be more straightforward to highlight sectors
* add ``track.margin``, ``cell.padding``, ``cell.xlim`` and ``cell.ylim`` in `get.cell.meta.data` function
* figures in vignettes are all generated automatically
* vignettes have been imporved
