D3序数和线性标度之间的差异

Bru*_*uce 38 javascript d3.js

var xScale = d3.scale.ordinal().domain([0, d3.max(data)]).rangeRoundBands([0, w], .1);
var yScale = d3.scale.linear().domain([0, data.length]).range([h, 0]);
Run Code Online (Sandbox Code Playgroud)

我很困惑在D3中何时使用序数线性刻度.

以下是我从API文档中发现的内容,仍有点丢失......如果有人可以提供帮助,我们将不胜感激.

序(x)的

给定输入域中的值x,返回输出范围中的相应值.

如果显式指定范围(通过范围,但不是rangeBands,rangeRoundBands或rangePoints),并且给定值x不在标度的域中,则x被隐式添加到域中; 在给定相同值x的比例的后续调用将从该范围返回相同的值y.

d3.scale.linear()

使用默认域[0,1]和默认范围[0,1]构造一个新的线性标度.因此,默认线性标度等同于数字的标识函数; 例如,线性(0.5)返回0.5.

Ole*_*leg 77

至于序数量表:

序数标度具有离散域,例如一组名称或类别.

序数比例的值必须对字符串具有可强制性,域值的字符串化版本唯一地标识相应的范围值.

因此,作为示例,序数标度的域可能包含名称,如下所示:

var ordinalScale = d3.scale.ordinal()
        .domain(['Alice', 'Bob'])
        .range([0, 100]);

ordinalScale('Alice'); // 0
ordinalScale('Bob'); // 100
Run Code Online (Sandbox Code Playgroud)

注意所有值都是字符串.它们无法插值.'Alice'和'Bob'之间有什么关系?我不知道.D3也没有.

现在,对于Quantitative Scales(例如Linear Scales):

定量尺度具有连续的域,例如实数或日期.

例如,您可以构建以下比例:

var linearScale = d3.scale.linear()
        .domain([0, 10])
        .range([0, 100]);

linearScale(0); // 0
linearScale(5); // 50
linearScale(10); // 100
Run Code Online (Sandbox Code Playgroud)

注意D3即使我们没有在域中明确指定它也能够插值5.

看看这个jsfiddle,看看上面的代码在行动.

  • 哎呀...你应该写d3 API doc,非常棒,完全有道理.谢谢堆:) (3认同)
  • 你好@dtri,很抱歉不清楚。这些是 D3 文档和 API 中经常使用的术语。我假设读者熟悉它们的含义。我也没有数学背景,但是阅读[函数域](https://en.wikipedia.org/wiki/Domain_of_a_function)是一个很好的起点,对我理解这些术语和 D3 有很大帮助本身。 (2认同)