D3 比例尺接口翻译

534 阅读2分钟

scaleLinear

这个比例尺是线性的,可以如下使用

var x = d3.scaleLinear()
    .domain([10, 130])
    .range([0, 960]);

x(20); // 80
x(50); // 320

这里还可以用来计算颜色,这个以前在项目中遇到过,需要根据传入的值,显示不同的颜色

var color = d3.scaleLinear()
    .domain([10, 100])
    .range(["brown", "steelblue"]);

color(20); // "#9a3439"
color(50); // "#7b5167"

invert

这个函数的作用就是根据传入的range值,返回domain的值,实例如下

var x = d3.scaleLinear()
    .domain([10, 130])
    .range([0, 960]);

x.invert(80); // 20
x.invert(320); // 50

rangeRound

这个返回一个整数

clamp

如果clamp设置了为true,则如果输入了不在范围之内的数值,仍然返回范围之内的数值,实例如下

var x = d3.scaleLinear()
    .domain([10, 130])
    .range([0, 960]);

x(-10); // -160, outside range
x.invert(-160); // -10, outside domain

x.clamp(true);
x(-10); // 0, clamped to range
x.invert(-160); // 10, clamped to domain

unknown

设置当输入非法值的时候,返回的值,实例如下:

paint = d3.scaleLinear()
  .range(["yellow", "red"])
  .unknown("#ccc")
 paint(NaN) 返回 #ccc

Interpolate

插入器,其实就是scaleLinear如何来根据range的值,如何返回domain的值,你可以使用d3自带的替换scaleLinear的默认插入器,比如

scaleRound = d3.scaleLinear()
  .range([0, 960])
  .interpolate(d3.interpolateRound)
  scaleRound(1 / 3)
  320

或者自己定义插入器,比如

scaleDecimal = d3.scaleLinear()
  .range([0, 960])
  .interpolate(function(a, b) {
    const c = b - a;
    return function(t) {
      return +(a + t * c).toFixed(1);
    };
  })
  
  scaleDecimal(2 / 7)
  
  274.3

ticks

设置把坐标分成几部分,但是并不是严格按照ticks传入的数值进行区分,而是根据传入的数据结构合理的进行划分,

当domain是[0, 100] 的时候,ticks 不管传入任何值,只会取0,1 ,2,5 10, 比如你传入3,实际和传入5一样的,也就是说ticks(3) 和 ticks(5)的结果是一样的。

详细可以看这里 blog.csdn.net/weixin_3370…

总之你可以按照最大值减去最小值除以1,2,5,10和10的倍数来设置。

tickFormat

设置坐标中展示刻度的表现形式

nice