跳到内容

顺序比例

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

scaleSequential(domain, interpolator)

示例 · 源代码 · 使用指定的 domaininterpolator 函数或数组构建新的顺序比例。

js
const color = d3.scaleSequential([0, 100], d3.interpolateBlues);

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

js
const color = d3.scaleSequential(d3.interpolateBlues);

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

js
const identity = d3.scaleSequential();

当应用比例时,插值器将使用通常在 [0, 1] 范围内的值调用,其中 0 表示最小值,1 表示最大值。例如,要实现不建议使用的愤怒彩虹比例(请改用 interpolateRainbow

js
const rainbow = d3.scaleSequential((t) => d3.hsl(t * 360, 1, 0.5) + "");

如果 interpolator 是数组,则它表示比例的两个元素输出范围,并使用 interpolate 转换为插值器函数。

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

顺序比例的域必须是数值,且必须恰好包含两个值。

sequential.interpolator(interpolator)

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

js
const color = d3.scaleSequential().interpolator(d3.interpolateBlues);

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

js
color.interpolator() // d3.interpolateBlues

sequential.range(range)

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

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

以上等同于

js
const color = d3.scaleSequential(d3.interpolate("red", "blue"));

sequential.rangeRound(range)

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

scaleSequentialLog(domain, range)

返回具有对数变换的新顺序比例,类似于 log 比例

scaleSequentialPow(domain, range)

返回具有指数变换的新顺序比例,类似于 幂比例

scaleSequentialSqrt(domain, range)

返回具有平方根变换的新顺序比例,类似于 sqrt 比例

scaleSequentialSymlog(domain, range)

返回具有对称对数变换的新顺序比例,类似于 symlog 比例

scaleSequentialQuantile(domain, range)

源代码 · 返回具有 p-分位数变换的新顺序比例,类似于 分位数比例

sequentialQuantile.quantiles(n)

源代码 · 返回包含 n + 1 个分位数的数组。

js
const color = d3.scaleSequentialQuantile()
    .domain(penguins.map((d) => d.body_mass_g))
    .interpolator(d3.interpolateBlues);

color.quantiles(4); // [2700, 3550, 4050, 4750, 6300]

例如,如果 n = 4,则返回包含五个数字的数组:最小值、第一个四分位数、中位数、第三个四分位数和最大值。