量化比例尺
量化比例尺类似于 线性比例尺,不同之处在于它们使用离散范围而不是连续范围。连续输入域根据输出范围中的值数量(即输出范围的基数)被划分为均匀的片段。每个范围值 *y* 可以表示为域值 *x* 的量化线性函数:*y* = *m round(x)* + *b*。参见 量化的分层地图 以获取示例。
scaleQuantize(domain, range)
示例 · 源代码 · 使用指定的 domain 和 range 创建一个新的量化比例尺。
const color = d3.scaleQuantize([0, 100], d3.schemeBlues[9]);
如果 *domain* 或 *range* 未指定,则每个默认设置为 [0, 1]。
const color = d3.scaleQuantize(d3.schemeBlues[9]);
quantize(value)
示例 · 源代码 · 给定输入 domain 中的 *value*,返回输出 range 中的对应值。例如,要应用颜色编码
const color = d3.scaleQuantize([0, 1], ["brown", "steelblue"]);
color(0.49); // "brown"
color(0.51); // "steelblue"
或者将域划分为三个大小相等的区域,并使用不同的范围值来计算合适的笔划宽度
const width = d3.scaleQuantize([10, 100], [1, 2, 4]);
width(20); // 1
width(50); // 2
width(80); // 4
quantize.invertExtent(value)
示例 · 源代码 · 返回 domain 中对应于 range 中的 *value* 的值的范围 [x0, x1]:quantize 的逆运算。此方法对交互很有用,例如,确定与鼠标下方像素位置对应的域中的值。
const width = d3.scaleQuantize([10, 100], [1, 2, 4]);
width.invertExtent(2); // [40, 70]
quantize.domain(domain)
示例 · 源代码 · 如果指定了 *domain*,则将比例尺的域设置为指定的包含两个元素的数字数组。
const color = d3.scaleQuantize(d3.schemeBlues[9]);
color.domain([0, 100]);
如果给定数组中的元素不是数字,则它们将被强制转换为数字。这些数字必须按升序排列,否则比例尺的行为将是未定义的。
如果未指定 *domain*,则返回比例尺的当前域。
color.domain() // [0, 100]
quantize.range(range)
示例 · 源代码 · 如果指定了 *range*,则将比例尺的范围设置为指定的包含任意值的数组。
const color = d3.scaleQuantize();
color.range(d3.schemeBlues[5]);
该数组可以包含任意数量的离散值。给定数组中的元素不必是数字;任何值或类型都可以使用。
如果未指定 *range*,则返回比例尺的当前范围。
color.range() // ["#eff3ff", "#bdd7e7", "#6baed6", "#3182bd", "#08519c"]
quantize.thresholds()
示例 · 源代码 · 返回 domain 中计算出的阈值数组。
color.thresholds() // [0.2, 0.4, 0.6, 0.8]
返回的阈值数量比 range 的长度少一个:小于第一个阈值的的值被分配给范围中的第一个元素,而大于或等于最后一个阈值的的值被分配给范围中的最后一个元素。
quantize.copy()
const c1 = d3.scaleQuantize(d3.schemeBlues[5]);
const c2 = c1.copy();
对此比例尺的更改不会影响返回的比例尺,反之亦然。