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,返回输出范围中的相应值.
如果显式指定范围(通过范围,但不是rangeBands,rangeRoundBands或rangePoints),并且给定值x不在标度的域中,则x被隐式添加到域中; 在给定相同值x的比例的后续调用将从该范围返回相同的值y.
使用默认域[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,看看上面的代码在行动.