阈值尺度
阈值尺度类似于 量化尺度,但它们允许您将域的任意子集映射到范围中的离散值。输入域仍然是连续的,并且根据一组阈值划分成切片。有关示例,请参见 此分层地图。
scaleThreshold(domain, range)
示例 · 源代码 · 使用指定的 domain 和 range 构造一个新的阈值尺度。
const color = d3.scaleThreshold([0, 1], ["red", "white", "blue"]);
如果未指定 domain,则默认值为 [0.5]。
const color = d3.scaleThreshold(["red", "blue"]);
color(0); // "red"
color(1); // "blue"
如果未指定 range,则默认值为 [0, 1]。
threshold(value)
示例 · 源代码 · 给定输入 domain 中的 value,返回输出 range 中的相应值。例如
const color = d3.scaleThreshold([0, 1], ["red", "white", "green"]);
color(-1); // "red"
color(0); // "white"
color(0.5); // "white"
color(1); // "green"
color(1000); // "green"
threshold.invertExtent(value)
源代码 · 返回 domain 中的值范围 [x0, x1],对应于 range 中的 value,表示从 range 到 domain 的反向映射。
const color = d3.scaleThreshold([0, 1], ["red", "white", "green"]);
color.invertExtent("red"); // [undefined, 0]
color.invertExtent("white"); // [0, 1]
color.invertExtent("green"); // [1, undefined]
此方法对于交互很有用,例如确定对应于鼠标下方像素位置的域中的值。最低阈值以下的范围是未定义的(无界),最高阈值以上的范围也是如此。
threshold.domain(domain)
示例 · 源代码 · 如果指定了 domain,则将尺度的域设置为指定的值数组。
const color = d3.scaleThreshold(["red", "white", "green"]).domain([0, 1]);
这些值必须按升序排列,否则尺度的行为将是未定义的。这些值通常是数字,但任何自然排序的值(如字符串)都可以工作;阈值尺度可以用于编码任何有序的类型。如果尺度范围中的值数量为 n + 1,则尺度域中的值数量必须为 n。如果域中少于 n 个元素,则会忽略范围中的附加值。如果域中多于 n 个元素,则尺度可能对某些输入返回 undefined。
如果未指定 domain,则返回尺度的当前域。
color.domain() // [0, 1]
threshold.range(range)
示例 · 源代码 · 如果指定了 range,则将尺度的范围设置为指定的值数组。
const color = d3.scaleThreshold().range(["red", "white", "green"]);
如果尺度域中的值数量为 n,则尺度范围中的值数量必须为 n + 1。如果范围中少于 n + 1 个元素,则尺度可能对某些输入返回 undefined。如果范围中多于 n + 1 个元素,则会忽略附加值。给定数组中的元素不必是数字;任何值或类型都可以工作。
如果未指定 range,则返回尺度的当前范围。
color.range() // ["red", "white", "green"]
threshold.copy()
const c1 = d3.scaleThreshold(d3.schemeBlues[5]);
const c2 = c1.copy();
对此尺度的更改不会影响返回的尺度,反之亦然。