This function returns pretty axis breaks that always include the extreme values of the data. This works by calling the extended Wilkinson algorithm (Talbot et al., 2010), constrained to solutions interior to the data range. Then, the minimum and maximum labels are moved to the minimum and maximum of the data range.

## Arguments

- dmin
minimum of the data range

- dmax
maximum of the data range

- n
desired number of breaks

- Q
set of nice numbers

- w
weights applied to the four optimization components (simplicity, coverage, density, and legibility)

- ...
other arguments passed to

`extended_range_breaks_()`

## Value

For `extended_range_breaks`

, the vector of axis label locations.
For `scales_extended_range_breaks`

, a function which takes a single argument, a vector of data, and returns
the vector of axis label locations.

A function which returns breaks given a vector.

## Details

`extended_range_breaks`

implements the algorithm and returns the break values.
`scales_extended_range_breaks`

uses the conventions of the scales package, and returns a function.

## References

Talbot, J., Lin, S., Hanrahan, P. (2010) An Extension of Wilkinson's Algorithm for Positioning Tick Labels on Axes, InfoVis 2010.

## Author

Justin Talbot jtalbot@stanford.edu, Jeffrey B. Arnold, Baptiste Auguie