
ggrepel 0.9.1 2021-01-09
========================

## Bug fixes

* Fix label positions (only for `geom_label_repel()`). The same plot would look
  OK with ggrepel 0.8.2, but incorrect with ggrepel 0.9.0. Thanks to
  Ben Baumer (@beanumber) for reporting this in [issue 182].

[issue 182]: https://github.com/slowkow/ggrepel/issues/182

* Fix a bug that caused R to crash (only on Windows, not on Linux or macOS) for
  some specific code examples. Thanks to Pedro Aphalo (@aphalo) for reporting
  this in [issue 179] and for testing the patched code.

[issue 179]: https://github.com/slowkow/ggrepel/issues/179


ggrepel 0.9.0 2020-12-14
========================

## Changes

* Points can be different sizes. Repel text labels from large points and small
  points. New examples in the vignette show how to do this. See discussion about
  this feature in [issue 83].

[issue 83]: https://github.com/slowkow/ggrepel/issues/83

* New parameter `max.overlaps` stops ggrepel from trying to label overcrowded
  data points. The default setting is `max.overlaps = 10`, so text labels that
  overlap more than 10 things (points or labels) will be excluded from further
  calculations and rendering. Of course, we can set `max.overlaps = Inf` to
  restore the behavior in ggrepel 0.8.1. See [issue 48] for more discussion.
  We can also use `option(ggrepel.max.overlaps = Inf)` to disable this new
  functionality and display all labels, regardless of too many overlaps.

[pull request 48]: https://github.com/slowkow/ggrepel/pull/48

* Add examples to the [vignette] for `ggplot2::position_jitter()` and
  `ggbeeswarm::position_quasirandom()`
  
* Line segments can now be curved (#131, @malcolmbarrett). Add examples
  to the [vignette] showing different options.

* Add support for new aesthetics:
  - segment.size
  - segment.colour
  - segment.alpha
  - segment.curvature
  - segment.angle
  - segment.ncp

* Add `max.time` option to limit the number of seconds spent trying to position
  the text labels.

* Add `verbose` option to show timing information: seconds elapse, iteration count,
  number of remaining overlaps (thanks to @MichaelChirico #159).
  
* Add `bg.color` and `bg.r` aesthetics for `geom_text()` to display shadows
  behind text labels. Thanks to @rcannood for adding this feature with
  [pull request 142].
  
[pull request 142]: https://github.com/slowkow/ggrepel/pull/142

## Bug fixes and improvements

* Line segments are the same color as the text by default (#164, @lishinkou).

* Text justification for multi-line text labels should be working as expected.
  Thanks to @johnhenrypezzuto and @phalteman for comments in [issue 137].

[issue 137]: https://github.com/slowkow/ggrepel/issues/137

* Put text labels on top of all line segments (@kiendang). This fixes
  [issue 35], where line segments sometimes appear on top of text.

[issue 35]: https://github.com/slowkow/ggrepel/issues/35

* Thanks to Paul Murrell (@pmur002) for notifying us to use `is.unit(x)`
  instead of `class(x) == "unit"` in [issue 141]. This should future-proof
  ggrepel for new versions of the grid package.

[issue 141]: https://github.com/slowkow/ggrepel/issues/141

* Fix the way `xlim = c(-Inf, Inf)` is treated. Thanks to @thomasp85 for
  pointing out the bug in [issue 136].

[issue 136]: https://github.com/slowkow/ggrepel/issues/136

* Add new segment options. Thanks to @krassowski for adding this feature with
  [pull request 151].
  - segment.shape
  - segment.square
  - segment.squareShape
  - segment.inflect

[pull request 151]: https://github.com/slowkow/ggrepel/pull/151

ggrepel 0.8.1 2019-05-07
========================

## Bug fixes and improvements

* Fix heap buffer overflow that causes R to crash. See [issue 115]. Thanks to
  Brodie Gaslam (@brodieG) for helping me to setup an environment to reproduce
  the bug on my own system.

[issue 115]: https://github.com/slowkow/ggrepel/issues/115

ggrepel 0.8.0 2018-05-09
========================

## Bug fixes and improvements

* Fix `geom_label_repel(..., point.padding=NA)`. Reported by @mlell in
  [issue 104].

[issue 104]: https://github.com/slowkow/ggrepel/issues/104

ggrepel 0.7.3 2018-02-09
========================

## Changes

* Add support for `position` parameter. See [issue 69]. This allows us to
  add text labels to points positioned with `position_jitter()`,
  `position_dodge()`, `position_jitterdodge()`, etc.

  Please note that this feature will not work with ggplot2 2.2.1 or older.

[issue 69]: https://github.com/slowkow/ggrepel/issues/69

ggrepel 0.7.2 2018-01-14
========================

## Bug fixes and improvements

Thanks to @AliciaSchep and @aphalo

* Fix warning about `hjust`. See [issue 93].

* Fix bug when subset of points is labeled in `geom_label_repel`.
  See [issue 92].

[issue 92]: https://github.com/slowkow/ggrepel/issues/92
[issue 93]: https://github.com/slowkow/ggrepel/issues/93

ggrepel 0.7.1 2017-11-18
========================

## Changes

Thanks to @AliciaSchep

* Add support for `hjust` and `vjust` parameters. See [issue 69].
  Also see new examples in the [vignette].

* Add code to avoid intersecting line segments. See [issue 34].

[issue 69]: https://github.com/slowkow/ggrepel/issues/69
[issue 34]: https://github.com/slowkow/ggrepel/issues/34

ggrepel 0.7.0 2017-09-28
========================

## Bug fixes

* Fix intersection between lines and rectangles, to reproduce the same
  aesthetically pleasant behavior as in version 0.6.5. 
  
  This is an improvement on the sloppy implementation introduced in 0.6.8. See
  [commit 28633d] for more information.

[commit 28633d]: https://github.com/slowkow/ggrepel/commit/28633db5eb3d3cc2bd935bd438a8bb36b5673951

ggrepel 0.6.12 2017-07-16
========================

## Changes

* Reproduce identical plots by using `seed = 1` to set the seed in
  `geom_text_repel()` or `geom_label_repel()`. By default, no seed will be set.
  
  This is an improvement on the sloppy implementation introduced in 0.6.2. See
  [issue 33] and [issue 73] for more discussion of this feature. Thanks to
  Pierre Gramme for reminding me about this via email.

[issue 33]: https://github.com/slowkow/ggrepel/issues/33
[issue 73]: https://github.com/slowkow/ggrepel/issues/73

ggrepel 0.6.11 2017-07-08
========================

## Changes

Thanks to @seaaan

* Allow certain parameters to be passed as numbers or `unit()`
  instead of only units. See [issue 79].

[issue 79]: https://github.com/slowkow/ggrepel/issues/79

ggrepel 0.6.10 2017-03-07
========================

## Bug fixes

Thanks to @zkamvar

* Fix the crash for plots that do not specify `xlim` or `ylim`.
  See [pull 74].

[pull 74]: https://github.com/slowkow/ggrepel/pull/74

ggrepel 0.6.9 2017-03-07
========================

## Bug fixes

* Fix the crash for plots with `facet_wrap` or `facet_grid` that have no
  labeled points. Thanks to @pcroteau for [pull 70].

[pull 70]: https://github.com/slowkow/ggrepel/pull/70

ggrepel 0.6.8 2017-02-12
========================

## Changes

* Constrain repulsion force to x-axis "x" or y-axis "y" with `direction` in
  `geom_text_repel()` and `geom_label_repel()`. Thanks to @AliciaSchep for [pull 68].

[pull 68]: https://github.com/slowkow/ggrepel/pull/68

ggrepel 0.6.7 2017-01-09
========================

## Changes

* Constrain text labels to specific areas of the plot with `xlim` and `ylim` in
  `geom_text_repel()` and `geom_label_repel()`. Thanks to @lukauskas for [pull 67].

[pull 67]: https://github.com/slowkow/ggrepel/pull/67

ggrepel 0.6.6 2016-11-28
========================

## Bug fixes

* Mathematical expressions as labels with `parse = TRUE` in 
  `geom_text_repel()` and `geom_label_repel()`.
  Thanks to @fawda123 for [issue 60].

[issue 60]: https://github.com/slowkow/ggrepel/issues/60

ggrepel 0.6.5 2016-11-22
========================

## Changes

Thanks to @jiho for these:

* changed `alpha` in `geom_label_repel()` to control text, label
  background, label border, and segment.

* Allow `segment.colour` as well as `segment.color`.

* By default, map text color and text alpha to the segment color unless they
  are overridden.

* Call `scales::alpha()` instead of `alpha()`.

ggrepel 0.6.4 2016-11-08
========================

## Bug fixes

* Fix a bug that caused ggrepel to fail on polar coordinates `coord_polar()`.
  See [issue 56].

[issue 56]: https://github.com/slowkow/ggrepel/issues/56

ggrepel 0.6.3 2016-10-14
========================

## Changes

* Use `point.padding=NA` to ignore data points in repulsion calculations.

ggrepel 0.6.2 2016-10-06
========================

## Bug fixes

* Stop the labels from escaping the plot boundaries instead of applying
  a force at the boundary.

* Call `set.seed` within `geom_text_repel()` and `geom_label_repel()` to
  allow recreating identical plots. Thanks to @erikor for [issue 33].

[issue 33]: https://github.com/slowkow/ggrepel/issues/33

## Changes

* Add `min.segment.length` to `geom_text_repel()` and `geom_label_repel()`.

ggrepel 0.6.1 2016-10-04
========================

## Changes

* Tweak `repel_boxes.cpp`. Dampen forces to tune how the labels move. The
  result looks better, at least for the examples in the [vignette].

ggrepel 0.6.0 2016-10-03
========================

## Changes

* Do not draw labels with empty strings. When a label is an empty string,
  the text will not be shown, the segment will not be drawn, but the
  corresponding data point will repel other labels. See [issue 51].

[issue 51]: https://github.com/slowkow/ggrepel/issues/51

* Add `segment.alpha` as an option for `geom_text_repel()` and
  `geom_label_repel()`.

* Implement `angle` aesthetic for `geom_text_repel()`, the same way as done in
  ggplot2 `geom_text()`.

* Move `nudge_x` and `nudge_y` out of the aesthetics function `aes()`. This
  makes ggrepel consistent with ggplot2 functions `geom_text()` and
  `geom_label()`. Backwards incompatible with 0.5.1.

* Restore `segment.color` as an option for `geom_text_repel()` and
  `geom_label_repel()`.

* Tweak `repel_boxes.cpp`. Do not weight repulsion force by ratios of bounding
  box heights and widths. This seems to perform better, especially after
  rotating text labels.

ggrepel 0.5.1 2016-02-22
========================

* Optimize C++ code further by reducing number of calls to `rnorm()`.

ggrepel 0.5 2016-02-08
========================

* First push to CRAN.

ggrepel 0.4.6 2016-02-07
========================

## Changes

* Tweak `point.padding` so that users can configure how far labels are pushed
  away from data points.

ggrepel 0.4.5 2016-02-06
========================

## Changes

* Optimize C++ code for a 2.5X speed improvment.

* Delete unnecessary .Rd files.

ggrepel 0.4.4 2016-02-05
========================

FIXES

* Fix the bug when the line segment from the data point points to the origin
  at (0,0) instead of the text label.

## Changes

* Automatically recompute repulsion between labels after resizing the plot.

ggrepel 0.4.3 2016-01-18
========================

## Changes

* Change distance between segment and label in `geom_label_repel()`. Now there
  is no gap between the end of the segment and the label border.

ggrepel 0.4.2 2016-01-15
========================

FIXES

* Fix `spring_force()` so that it never returns NaN.

## Changes

* Add `nudge_x` and `nudge_y` to better control positioning of labels.

ggrepel 0.4.1 2016-01-13
========================

## Changes

* Add `arrow` parameter to allow plotting arrows that point to the labeled data
  points rather than plain line segments.

* Always draw segments, even if the labeled point is very close to the label.

FIXES

* Fix `point.padding` so that horizontal and vertical padding is calculated
  correctly.

* Tweak forces to improve layout near borders and in crowded areas.

ggrepel 0.4 2016-01-12
========================

## Bug fixes

* Fix [issue 7]. Labels can now be placed anywhere in the plotting area
  instead of being limited to the x and y ranges of their corresponding data
  points.

[issue 7]: https://github.com/slowkow/ggrepel/issues/7

* Fix DESCRIPTION to require ggplot2 >= 2.0.0

## Changes

* Add new parameter `point.padding` to add padding around the labeled points.
  The line segment will stop before reaching the coordinates of the point. The
  text labels are also now padded from the line segment to improve legibility.

* Add volcano plot to the [vignette] usage examples.

* Add Travis continuous integration to test against R-devel, R-release, and
  R-oldrel.

* Dampen repulsion force to slightly improve algorithm efficiency.

* Move `intersect_line_rectangle()` to `src/repel_boxes.cpp`.

ggrepel 0.3 2016-01-08
========================

## Changes

* Remove unused imports: `colorspace`.

* Update NAMESPACE with new version of roxygen.

* Use spring force to attract each label to its own point.

* Change default maximum iterations from 10,000 to 2000.

* Update man pages.

* Remove unused code.

ggrepel 0.2.0 2016-01-07
========================

## Changes

* Update `geom_text_repel()` and `geom_label_repel()`.

    * Change `label.padding` to `box.padding`.

    * Remove unsupported parameters:
        * position
        * nudge_x
        * nudge_y
        * hjust
        * vjust

* Remove unused imports.

## Documentation

* Add roxygen docs to all functions.

ggrepel 0.1.0 2016-01-05
========================

## Changes

* Add `geom_label_repel()`.

* Add fudge width to help with legends.

* Add `expand=TRUE` to allow text to be placed in the expanded plot area.

* Add man/ folder.

* Add links to ggplot2 docs in [vignette].

* Add unused R implementation of `repel_boxes()`, just for your reference.

ggrepel 0.0.1 2016-01-04
========================

* Initial release to github.

[vignette]: https://github.com/slowkow/ggrepel/blob/master/vignettes/ggrepel.Rmd
