Skip to content

Releases: r-lib/scales

scales 1.3.0

28 Nov 14:45
Compare
Choose a tag to compare

Better type support

  • rescale(I(x), ...) and rescale_mid(I(x), ...) return I(x) unaltered
    (@teunbrand, #403).
  • Add a rescale method for difftime objects (#382)
  • Add better support for difftime objects. label_timespan() adds
    functionality for adding correct unit suffix to timespan data,
    breaks_timespan() adds functionality for finding pleasant breakpoints across
    the various bases in time units, while transform_timespan() wraps it all
    together and provides an alternative to transform_hms() (#212)

Ranges

  • train_continuous() coerces new to numeric before calculating range
    (@teunbrand, #369).
  • Training on factor data no longer sorts the range after multiple training
    passes if the new fct argument of train_discrete() is used (#383)
  • The DiscreteRange class now keeps track on whether it has been trained on
    factor data.
  • Attempt to make the sort behavior of the range consistent for character
    vectors during training. Mixing of character and factor data will make the
    factor level order take precedence no matter if the training starts with a
    charactor vector

Transformations

  • Transformation function have been renamed to transform_*-prefixed names
    instead of *_trans-suffixed names. This allows for a better tab-completion
    search of transformations. The S3 class of transformations has been
    renamed from "trans" to "transform". new_transform() replaces
    trans_new() and trim_to_domain() replaces trans_range(). All old
    functions are kept for posterity.
  • transform_sqrt() no longer returns an inverse for values outside of its
    domain (#214)
  • Add an inverse (area) hyperbolic sine transformation transform_asinh(),
    which provides a logarithm-like transformation of a space, but which
    accommodates negative values (#297)
  • Correct the domain calculation for transform_compose() (@mjskay, #408).
  • Transformation objects can optionally include the derivatives of the transform
    and the inverse transform (@mjskay, #322).

Misc

  • The scale_cut argument in number() now works as advertised for values
    below the lowest cut value (#346)
  • scale_cut will now choose a more appropriate cut in the case of the first
    cut creating an irrational-ish number.
  • Added a new option to the style_positive argument in label_*() functions.
    Setting this to "space" will add a figure space in front of the number to
    make it easier to align positive and negative values as figure space takes up
    the same amount of space as - (#366)
  • label_dollar() has been superseeded by label_currency() for clarity (#344)
  • Palette functions now have the pal_-prefix. The old _pal-suffixed versions
    are kept for backward compatibility.

scales 1.2.1

20 Aug 12:22
Compare
Choose a tag to compare
  • Re-document to fix HTML issues in .Rd.

scales 1.2.0

13 Apr 23:20
Compare
Choose a tag to compare

New features

  • label_number():

    • New style_positive and style_negative argument control how positive and
      negative numbers are styled (#249, #262).

    • The prefix comes after the negative sign, rather than before it, yielding
      (e.g) the correct -$1 instead of $-1.

    • New scale_cut argument enables independent scaling of different parts of
      the range. This is useful in label_dollar() to support scaling
      of large numbers by suffix (e.g. "M" for million, "B" for billion). It can
      be used with cut_short_scale() when billion = thousand million and
      cut_long_scale() when billion = million million (initial implementation
      provided by @davidchall). Additionally, the accuracy is now computed per
      scale category, so rescaled values can have different numbers of decimal
      places (#339).

    • label_number_si() is deprecated because it previously used
      short scale abbreviations
      instead of the correct SI prefixes.
      You can mimic the previous results with
      label_number(scale_cut = cut_scale_short()) or get real SI labels with
      label_number(scale_cut = cut_SI("m")) (#339, with help from @davidchall).

  • label_bytes() now correctly accounts for the scale argument when choosing
    auto units (@davidchall, #235).

  • label_date() and label_time() gain a locale argument that allows you
    to set the locale used to generate day and month names (#309).

  • New label_log() displays the base and a superscript exponent, for use with
    logarithmic axes (@davidchall, #312).

  • New compose_trans() allows arbitrary composition of transformers. This
    is mostly easily achieved by passing a character vector whenever you might
    previously have passed the name of a single transformer. For example,
    scale_y_continuous(trans = c("log10", "reverse")) will create a
    reverse log-10 scale (#287).

Bug fixes and minor improvements

  • breaks_width() now supports units like "3 months" in the offset
    argument.

  • col_quantile() no longer errors if data is sufficiently skewed that we
    can't generate the requested number of unique colours (#294).

  • dollar(negative_parens) is deprecated in favour of style_negative = "parens".

  • hue_pal() respects h.start once again (#288).

  • label_number_auto() correctly formats single numbers that are greater than
    1e+06 without an error (@karawoo, #321)

  • manual_pal() now always returns an unnamed colour vector, which is easy to
    use with ggplot2::discrete_scale() (@yutannihilation, #284).

  • time_trans() and date_trans() have domains of the correct type so that
    they can be transformed without error (#298).

  • Internal precision(), used when accuracy = NULL, now avoids displaying
    unnecessary digits (@davidchall, #304).

scales 1.1.1

12 May 12:16
Compare
Choose a tag to compare
  • breaks_width() now handles difftime/hms objects (@bhogan-mitre, #244).

  • hue_pal() now correctly inverts color palettes when direction = -1
    (@dpseidel, #252).

  • Internal precision(), used when accuracy = NULL, now does a better
    job when duplicate values are present (@teunbrand, #251). It also does a
    better job when there's a mix of finite and non-finite values (#257).

  • New oob_keep() to keep data outside range, allowing for zoom-limits when
    oob_keep is used as oob argument in scales. Existing out of bounds
    functions have been renamed with the oob_-prefix to indicate their role
    (@teunbrand, #255).

  • ordinal_french() gains plural and gender arguments (@stephLH, #256).

scales 1.1.0

18 Nov 16:57
Compare
Choose a tag to compare
  • Axis breaks and labels have a new naming scheme: functions that generate
    breaks from limits are called breaks_; functions that generate labels
    from breaks are called labels_ (#226).

  • All breaks and labels examples have been overhauled to use new
    demo_continuous(), demo_discrete(), and demo_log10(), so you
    can see how to use scales functions with ggplot2.

Labels

  • All label functions preserve names (#202) and keep NAs as NAs instead of
    trying to convert to "NA" (@clauswilke, #187).

  • New label_bytes() replaces number_bytes_format() with a more
    convenient interface. It takes a single unit argument which can either be
    an SI unit (e.g. "kB"), a binary unit (e.g. "kIB"), or an automatic unit
    (either "auto_si" or "auto_binary").

    It always uses "B" as the symbol for bytes (#174), and checks that units
    are valid. Additionally, auto units are now used to determine the symbol
    separately for each value (@mikmart):

    label_bytes("auto_binary")(1024^(1:3)) 
    #> [1] "1 kiB" "1 MiB" "1 GiB" 
  • New label_date_short() creates labels for a date axis that only show the
    components of the date that have changed since the previous label.
    For example, if you have Jan 10, Jan 20, Jan 30, and Feb 1,
    label_date_short() will use labels Jan 10, 20, 30, Feb 1 (#209).

  • label_dollar() now correctly formats negative numbers as (e.g.) -$200
    (#216).

  • label_math() now returns an expression vector, and doesn't coerce
    inputs to names.

  • label_number() takes scale into account when computing accuracy, if not
    supplied. This means that label_percent() should have better default
    accuracy in many cases (#192).

  • label_number() now picks the accuracy automatically by default. The
    underlying heuristic has been improved to use the distance between adjacent
    breaks (rather than the total range of the break).

  • New label_number_auto() automatically picks between number_format() and
    scientific_format() based on the range of the input. It should produce nice
    output over a very wide range of inputs (@paleolimbot, #208).

  • New label_number_si() formats numeric vectors with limited SI units.
    Individual values are scaled and labelled with abbreviations "K", "M", "B",
    or "T" dependent on magnitude (@dpseidel, #83).

  • label_parse() now generates an expression object that can be used to
    display formatted labels in ggplot2 (@agila5, #203).

  • label_pvalue() now reports values close to 1 (as determined by accuracy)
    as (e.g.) ">0.99". You can control the prefixes used with the new
    prefix argument (#213).

Breaks

  • The built in breaks functions now returns a function that takes both a range
    and a desired number of breaks, making it possible to overwrite the defaults
    number of desired breaks given in the constructor call (@thomasp85).

  • breaks_log() has nicer behaviour when there are no finite inputs (#210).
    It also provides usable breaks even with very small ranges (@billdenney, #168)

  • New breaks_width() which allows you to specify a fixed distance between
    breaks (along with optional offset).

Transformations

  • New yj_trans() implements the Yeo-Johnson transformation (@zamorarr, #196)

  • trans objects gets methods for plot() and lines(), and all numeric
    transformations get an example showing the transformation.

  • boxcox_trans() no longer throws an error when given NA values
    (@sflippl, #181).

Other bug fixes and minor improvements

  • scales now uses the farver package for colour manipulation instead of a
    combination of grDevices and hand-rolled C++ code (#223).

  • alpha() now preserves element names (@wibeasley, #195)

  • ContinuousRange and DiscreteRange methods now properly inherit and are
    fully mutable (@dpseidel).

  • col_numeric(), col_bin(), col_quantile(), and col_factor() now support
    viridis colors. Just pass a palette name ("magma", "inferno", "plasma",
    or "viridis") as the palette argument (@jcheng5, #191).

  • col_numeric(), col_bin(), col_quantile(), and col_factor() now have a
    reverse parameter, to apply color palettes in the opposite of their usual
    order (i.e. high-to-low instead of low-to-high) (@jcheng5, #191).

  • col_bin() and col_quantile() now take a right argument, which is passed
    to base::cut(); it indicates whether the bin/quantile intervals should be
    closed on the right (and open on the left), or vice versa (@jcheng5, #191).

  • col_factor() now tries to avoid interpolating qualitative RColorBrewer
    palettes. Instead, it attempts to assign a palette color to each factor level.
    Interpolation will still be used if there are more factor levels than
    available colors, and a warning will be emitted in that case (@jcheng5, #191).

  • dichromat_pal() documentation now builds without requiring suggested
    dichromat package to be installed (@dpseidel, #172).

  • date_breaks() now supports subsecond intervals (@dpseidel, #85).

scales 1.0.0

09 Aug 12:39
Compare
Choose a tag to compare

New Features

Formatters

  • comma_format(), percent_format() and unit_format() gain new arguments:
    accuracy, scale, prefix, suffix, decimal.mark, big.mark
    (@larmarange, #146).

  • dollar_format() gains new arguments: accuracy, scale, decimal.mark,
    trim (@larmarange, #148).

  • New number_bytes_format() and number_bytes() format numeric vectors into byte
    measurements (@hrbrmstr, @dpseidel).

  • New number_format() provides a generic formatter for numbers (@larmarange, #142).

  • New pvalue_format() formats p-values (@larmarange, #145).

  • ordinal_format() gains new arguments: prefix, suffix, big.mark, rules;
    rules for French and Spanish are also provided (@larmarange, #149).

  • scientific_format() gains new arguments: scale, prefix, suffix, decimal.mark,
    trim (@larmarange, #147).

  • New time_format() formats POSIXt and hms objects (@dpseidel, #88).

Transformations & breaks

  • boxcox_trans() is now invertible for x >= 0 and requires positive values.
    A new argument offset allows specification of both type-1 and type-2 Box-Cox
    transformations (@dpseidel, #103).

  • log_breaks() returns integer multiples of integer powers of base when finer
    breaks are needed (@ThierryO, #117).

  • New function modulus_trans() implements the modulus transformation for positive
    and negative values (@dpseidel).

  • New pseudo_log_trans() for transforming numerics into a signed logarithmic scale
    with a smooth transition to a linear scale around 0 (@lepennec, #106).

Minor bug fixes and improvements

  • scales functions now work as expected when it is used inside a for loop. In previous
    package versions if a scales function was used with variable custom parameters
    inside a for loop, some of the parameters were not evaluated until the end
    of the loop, due to how R lazy evaluation works (@zeehio, #81).

  • colour_ramp() now uses alpha = TRUE by default (@clauswilke, #108).

  • date_breaks() now supports subsecond intervals (@dpseidel, #85).

  • Removes dichromat and plyr dependencies. dichromat is now suggested
    (@dpseidel, #118).

  • expand_range() arguments mul and add now affect scales with a range of 0
    (@dpseidel,
    ggplot2-2281).

  • extended_breaks() now allows user specification of the labeling::extended()
    argument only.loose to permit more flexible breaks specification
    (@dpseidel, #99).

  • New rescale() and rescale_mid() methods support dist objects (@zeehio, #105).

  • rescale_mid() now properly handles NAs (@foo-bar-baz-qux, #104).

scales 0.5.0

24 Aug 16:25
Compare
Choose a tag to compare
  • New function regular_minor_breaks() calculates minor breaks as a property
    of the transformation.
  • Adds viridis_pal() for creating palettes with color maps from the
    viridisLite package.
  • Switched from reference classes to R6.
  • rescale() and rescale_mid() are now S3 generics, and work with numeric,
    Date, POSIXct, POSIXlt and bit64::integer64 objects.

scales 0.4.1

11 Nov 16:30
Compare
Choose a tag to compare
  • extended_breaks() no longer fails on pathological inputs
  • New hms_trans() for transforming hms time vectors.
  • train_discrete() gets a new na.rm argument which controls whether
    NAs are preserved or dropped.

scales 0.4.0

26 Feb 15:32
Compare
Choose a tag to compare
  • Switched from NEWS to NEWS.md
  • manual_pal() produces a warning if n is greater than the number of values
    in the palette (@jrnold, #68).
  • precision(0) now returns 1, which means percent(0) now returns 0% (#50).
  • scale_continuous() uses a more correct check for numeric values.
  • NaN is correctly recognised as a missing value by the gradient palettes
    (ggplot2#1482).

scales 0.3.0

25 Aug 13:39
Compare
Choose a tag to compare
  • rescale() preserves missing values in input when the range of x is
    (effectively) 0 (ggplot2#985).
  • Continuous colour palettes now use colour_ramp() instead of colorRamp().
    This only supports interpolation in Lab colour space, but is hundreds of
    times faster.