D3js v4:scaleOrdinal没有rangePoints()

Don*_*zzi 11 d3.js

我迁移平行坐标源代码这里到最新版本d3js(d3js 4.5.0).我坚持这一行:

var x = d3.scale.ordinal().rangePoints([0, width], 1) 
Run Code Online (Sandbox Code Playgroud)

似乎在d3js v4中该rangePoints函数不再存在.我可以改为d3.scaleOrdinal(),但它只有range函数,而不是rangePoints函数.有什么线索吗?

Ger*_*ado 25

在D3 V4,创建了两个新的尺度:scaleBandscalePoint,现在有一些的,该功能scale.ordinal必须在3个版本(其中包括rangePoints).

它记录在changelog中:

类似地,ordinal.rangePoints和ordinal.rangeRoundPoints方法已被替换为序数比例的新子​​类:点比例.3.x中的以下代码:

var x = d3.scale.ordinal()
.domain(["a", "b", "c"])
.rangePoints([0, width]);
Run Code Online (Sandbox Code Playgroud)

相当于4.0中的这个:

var x = d3.scalePoint()
.domain(["a", "b", "c"])
.range([0, width]);
Run Code Online (Sandbox Code Playgroud)

因此,这里需要的比例是scalePoint:

点标度是频带标度的变体,带宽固定为零.点标度通常用于具有序数或分类维度的散点图.

因此,将您的比例更改为:

var x = scalePoint()
    .range([0, width])
    .padding(.1);
Run Code Online (Sandbox Code Playgroud)

注意padding:在点刻度中,range只接受范围数组,而不是padding.