たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

d3.js scaleの更新

scaleのdomainやrangeを更新したい、どうすべきか

codes

index.js
Showing the top match Last indexed 5 days ago
7     default as scaleIdentity
8   } from "./src/identity";
9   
10  export {
11    default as scaleLinear
12  } from "./src/linear";  

Search · scaleLinear · GitHub

d3-scale/src/linear.js
export default function linear() {
  var scale = continuous(deinterpolate, reinterpolate);

  scale.copy = function() {
    return copy(scale, linear());
  };

  return linearish(scale);
}

d3-scale/linear.js at 396d1c95fef85241bc3b4b75d747174251ae8e89 · d3/d3-scale · GitHub

linear()は、continuous Scaleをlinearish()でlinear化して返す。要はlinear Scaleを返す.

export default function continuous(deinterpolate, reinterpolate) {
......
  function rescale() {
    piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;
    output = input = null;
    return scale;
  }
  function scale(x) {
    return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x);
  }
......
  scale.domain = function(_) {
    return arguments.length ? (domain = map.call(_, number), rescale()) : domain.slice();
  };
......
  return rescale();
}

continuousはscale関数を返す. だからscale(x)でスケーリングできるんだね
d3-scale/continuous.js at 396d1c95fef85241bc3b4b75d747174251ae8e89 · d3/d3-scale · GitHub