d3-scale icon indicating copy to clipboard operation
d3-scale copied to clipboard

Continuous scales do not support `.rangeRound()`

Open Pezmc opened this issue 5 years ago • 1 comments

The majority of scales (including sequential and diverging) support calling rangeRound() to return the rounded min and max.

However, time (underpinned by continuous) only supports .rangeRound([min, max]). Not passing in arguments causes the method to throw, since the range gets set to undefined, then the scale expects the range to be defined!

Uncaught TypeError: Cannot read property 'length' of undefined

    function rescale() {
      var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear,
          uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;
      output = linear(domain, range, uninterpolate, interpolate);
      input = linear(range, domain, uninterpolate, d3_interpolate);
      return scale;
    }

Pezmc avatar Dec 10 '20 19:12 Pezmc

scale.rangeRound isn’t intended to be used as a getter; it’s only supposed to be used as a setter. This is an oversight.

mbostock avatar Mar 29 '21 16:03 mbostock