跳至内容

分位数刻度

分位数刻度将采样输入域映射到离散范围。域被认为是连续的,因此刻度将接受任何合理的输入值;但是,域被指定为离散样本值的集合。输出范围中的值数量(基数)决定了将从域计算出的分位数的数量。为了计算分位数,域被排序,并被视为一个 离散值总体;参见 quantile。参见 此分位数等值线图 以获取示例。

scaleQuantile(domain, range)

示例 · 源代码 · 使用指定的 domainrange 构造一个新的分位数刻度。

js
const color = d3.scaleQuantile(penguins.map((d) => d.body_mass_g), d3.schemeBlues[5]);

如果 domainrange 未指定,则每个都默认为空数组。分位数刻度在指定域和范围之前无效。

quantile(value)

示例 · 源代码 · 给定输入 domain 中的 value,返回输出 range 中的对应值。

js
color(3000); // "#eff3ff"
color(4000); // "#6baed6"
color(5000); // "#08519c"

quantile.invertExtent(value)

示例 · 源代码 · 返回 domain 中对应于 range 中的 value 的值的范围 [x0, x1]:quantile 的逆。

js
color.invertExtent("#eff3ff"); // [2700, 3475]
color.invertExtent("#6baed6"); // [3800, 4300]
color.invertExtent("#08519c"); // [4950, 6300]

此方法对交互很有用,例如确定与鼠标下方像素位置对应的域中的值。

quantile.domain(domain)

示例 · 源代码 · 如果指定了 domain,则将分位数刻度的域设置为指定的离散数值集,并返回此刻度。

js
const color = d3.scaleQuantile(d3.schemeBlues[5]);
color.domain(penguins.map((d) => d.body_mass_g));

数组不能为空,并且必须包含至少一个数值;NaN、null 和 undefined 值将被忽略,并且不被视为样本总体的部分。如果给定数组中的元素不是数字,它们将被强制转换为数字。输入数组的副本被排序并保存在内部。

如果未指定 domain,则返回刻度的当前域(观察到的值集)。

js
color.domain() // [2700, 2850, 2850, 2900, 2900, 2900, 2900, …]

quantile.range(range)

示例 · 源代码 · 如果指定了 range,则设置范围中的离散值。

js
const color = d3.scaleQuantile();
color.range(d3.schemeBlues[5]);

数组不能为空,并且可以包含任何类型的值。range 数组中的值数量(基数或长度)决定了计算的分位数的数量。例如,要计算四分位数,range 必须是一个包含四个元素的数组,例如 [0, 1, 2, 3]。

如果未指定 range,则返回当前范围。

js
color.range() // ["#eff3ff", "#bdd7e7", "#6baed6", "#3182bd", "#08519c"]

quantile.quantiles()

示例 · 源代码 · 返回分位数阈值。

js
color.quantiles() // [3475, 3800, 4300, 4950]

如果 range 包含 n 个离散值,则返回的数组将包含 n - 1 个阈值。小于第一个阈值的数值被视为第一个分位数中的数值;大于或等于第一个阈值但小于第二个阈值的数值在第二个分位数中,依此类推。在内部,阈值数组与 bisect 一起使用以查找与给定输入值关联的输出分位数。

quantile.copy()

示例 · 源代码 · 返回此刻度的精确副本。

js
const c1 = d3.scaleQuantile(d3.schemeBlues[5]);
const c2 = c1.copy();

对此刻度的更改不会影响返回的刻度,反之亦然。