序数刻度
与 连续刻度 不同,序数刻度具有离散的域和值域。例如,序数刻度可以将一组命名类别映射到一组颜色,或者确定柱状图中各列的水平位置。
scaleOrdinal(domain, range)
示例 · 源代码 · 使用指定的 域 和 值域 创建一个新的序数刻度。
const color = d3.scaleOrdinal(["a", "b", "c"], ["red", "green", "blue"]);
如果未指定 域,则默认为空数组。如果未指定 值域,则默认为空数组;序数刻度始终返回 undefined,直到定义非空值域。
ordinal(value)
示例 · 源代码 · 给定输入 域 中的 值,返回输出 值域 中的对应值。
color("a") // "red"
如果给定的 值 不在刻度的 域 中,则返回 未知值;或者,如果未知值是 隐式 的(默认值),则将 值 隐式地添加到域中,并将值域中下一个可用的值分配给 值,以便此调用和随后对该刻度使用相同输入 值 的调用返回相同输出值。
ordinal.domain(domain)
示例 · 源代码 · 如果指定了 域,则将域设置为指定的值数组。
const color = d3.scaleOrdinal(["red", "green", "blue"]).domain(["a", "b", "c"]);
color("a"); // "red"
color("b"); // "green"
color("c"); // "blue"
域 中的第一个元素将映射到 值域 中的第一个元素,第二个域值映射到第二个值域值,依此类推。域值在内部存储在一个 InternMap 中,从原始值到索引;然后使用生成的索引从值域中检索值。因此,序数刻度的值必须可强制转换为原始值,而原始域值唯一地标识对应值域值。
color.domain() // ["a", "b", "c"]
如果未指定 域,则此方法返回当前域。
如果 未知值 是 隐式 的(默认值),则在序数刻度上设置域是可选的。在这种情况下,域将从使用中隐式推断,方法是为传递给刻度的每个唯一值分配来自值域的新值。
const color = d3.scaleOrdinal(["red", "green", "blue"]);
color("b"); // "red"
color("a"); // "green"
color("c"); // "blue"
color.domain(); // inferred ["b", "a", "c"]
注意
建议使用显式域来实现确定性行为;从使用中推断域取决于排序。
ordinal.range(range)
示例 · 源代码 · 如果指定了 值域,则将序数刻度的值域设置为指定的值数组。
const color = d3.scaleOrdinal().range(["red", "green", "blue"]);
域中的第一个元素将映射到 值域 中的第一个元素,第二个域值映射到第二个值域值,依此类推。如果 值域 中的元素少于域中的元素,则刻度将从 值域 的开头重用值。如果未指定 值域,则此方法返回当前值域。
ordinal.unknown(value)
示例 · 源代码 · 如果指定了 值,则将刻度对未知输入值的输出值设置为指定值,并返回此刻度。
const color = d3.scaleOrdinal(["a", "b", "c"], d3.schemeTableau10).unknown(null);
color("a"); // "#4e79a7"
color("b"); // "#f28e2c"
color("c"); // "#e15759"
color("d"); // null
如果未指定 值,则返回当前未知值,默认值为 隐式。隐式值启用隐式域构造;请参见 ordinal.domain。
ordinal.copy()
const c1 = d3.scaleOrdinal(["a", "b", "c"], d3.schemeTableau10);
const c2 = c1.copy();
对该刻度的更改不会影响返回的刻度,反之亦然。
scaleImplicit
示例 · 源代码 · ordinal.unknown 的一个特殊值,它启用隐式域构造:未知值会隐式地添加到域中。
const color = d3.scaleOrdinal(["a", "b", "c"], d3.schemeTableau10);
color.unknown(); // d3.scaleImplicit
注意
建议使用显式域来实现确定性行为;从使用中推断域取决于排序。