

   PPrreettttyy BBrreeaakkppooiinnttss

        pretty(x, n = 5, min.n = n %/% 3,  shrink.sml = 0.75,
               high.u.bias = 1.5, u5.bias = .5 + 1.5*high.u.bias,
               eps.correct = 0)

   AArrgguummeennttss::

          x: numeric vector

          n: integer giving the desired number of intervals.

      min.n: nonnegative integer giving the minimal number of
             intervals.  If `min.n == 0', `pretty(.)' may
             return a single value.

   shrink.sml: positive numeric by a which a default scale is
             shrunk in the case when `range(x)' is ``very
             small'' (usually 0).

   high.u.bias: non-negative numeric, typically > 1.  The
             interval unit is determined as {1,2,5,10} times
             `b', a power of 10.  Larger `high.u.bias' values
             favor larger units.

    u5.bias: non-negative numeric multiplier favoring factor 5
             over 2.  Default and ``optimal'': `u5.bias = .5 +
             1.5*high.u.bias'.

   eps.correct: integer code, one of {0,1,2}. If non-0, an
             ``epsilon correction'' is made at the boundaries
             such that the result boundaries will be outside
             `range(x)'; in the small case, the correction is
             only done if `eps.correct >=2'.

   DDeessccrriippttiioonn::

        Compute a  sequence of about `n+1' equally spaced nice
        values which cover the range of the values in `x'.  The
        values are chosen so that they are 1, 2 or 5 times a
        power of 10.

   DDeettaaiillss::

        Let `d <- max(x) - min(x)' >= 0.  If `d' is not (very
        close) to 0, we let `c <- d/n', otherwise more or less
        `c <- max(abs(range(x)))*shrink.sml / min.n'.  Then,
        the 10 base `b' is 10^(floor(log10(c))) such that b <=
        c < 10b.

        Now determine the basic unit u as one of {1,2,5,10} b,
        depending on c/b in [1,10) and the two ``bias'' coeffi-
        cients, h =`high.u.bias' and f =`u5.bias'.

        .........

   EExxaammpplleess::

        pretty(1:15)    # 0  2  4  6  8 10 12 14 16
        pretty(1:15, h=2)# 0  5 10 15
        pretty(1:15, n=4)# 0  5 10 15
        pretty(1:15 * 2) # 0  5 10 15 20 25 30
        pretty(1:20)     # 0  5 10 15 20
        pretty(1:20, n=2) # 0 10 20
        pretty(1:20, n=10)# 0  2  4 ... 20

        for(k in 5:11) {
          cat("k=",k,": "); print(diff(range(pretty(100 + c(0, pi*10^-k)))))}

        ##-- more bizarre, when  min(x) == max(x):
        pretty(pi)

        add.names <- function(v) { names(v) <- paste(v); v}
        str(lapply(add.names(-10:20), pretty))
        str(lapply(add.names(0:20),   pretty, min = 0))
        sapply(    add.names(0:20),   pretty, min = 4)

        pretty(1.234e100)
        pretty(1001.1001)
        pretty(1001.1001, shrink = .2)
        for(k in -7:3)
          cat("shrink=",formatC(2^k,wid=9),":",
              formatC(pretty(1001.1001, shrink = 2^k), wid=6),"\n")

