跳至内容

发散刻度

发散刻度类似于 线性刻度,它们将连续的数值输入域映射到连续的输出范围。与线性刻度不同的是,发散刻度的输入域和输出范围始终恰好包含三个元素,并且输出范围通常指定为插值器,而不是值数组。发散刻度通常用于颜色编码;另请参见 d3-scale-chromatic。这些刻度不公开 invertinterpolate 方法。还有 logpowsymlog 发散刻度的变体。

scaleDiverging(domain, interpolator)

示例 · 源代码 · 使用指定的 domaininterpolator 函数或数组构造一个新的发散刻度。

js
const color = d3.scaleDiverging([-1, 0, 1], d3.interpolateRdBu);

如果未指定 domain,则默认值为 [0, 0.5, 1]。

js
const color = d3.scaleDiverging(d3.interpolateRdBu);

如果未指定 interpolator,则默认值为恒等函数。

js
const identity = d3.scaleDiverging();

当应用刻度时,插值器将使用一个值调用,该值通常在 [0, 1] 范围内,其中 0 表示极负值,0.5 表示中性值,1 表示极正值。

如果 interpolator 是一个数组,则它表示刻度的三个元素输出范围,并使用 d3.interpolated3.piecewise 转换为插值器函数。

js
const color = d3.scaleDiverging(["blue", "white", "red"]);

发散刻度的域必须是数值,并且必须恰好包含三个值。

diverging.interpolator(interpolator)

如果指定了 interpolator,则将刻度的插值器设置为指定的函数。

js
const color = d3.scaleDiverging().interpolator(d3.interpolateRdBu);

如果未指定 interpolator,则返回刻度的当前插值器。

js
color.interpolator() // d3.interpolateRdBu

diverging.range(range)

参见 linear.range。如果指定了 range,则使用 piecewise 将给定的三个元素数组转换为插值器函数。

js
const color = d3.scaleDiverging().range(["blue", "white", "red"]);

以上等同于

js
const color = d3.scaleDiverging(d3.piecewise(["blue", "white", "red"]));

diverging.rangeRound(range)

参见 linear.range。如果指定了 range,则隐式地使用 interpolateRound 作为插值器。

scaleDivergingLog(domain, range)

返回一个具有对数变换的新发散刻度,类似于 log 刻度

scaleDivergingPow(domain, range)

返回一个具有指数变换的新发散刻度,类似于 幂刻度

scaleDivergingSqrt(domain, range)

返回一个具有平方根变换的新发散刻度,类似于 sqrt 刻度

scaleDivergingSymlog(domain, range)

返回一个具有对称对数变换的新发散刻度,类似于 symlog 刻度