数据分箱
将定量值划分为连续的、不重叠的区间,如直方图。(另请参见 Observable Plot 的 bin 变换。)
bin()
const bin = d3.bin().value((d) => d.culmen_length_mm);
示例 · 源代码 · 使用默认设置构建一个新的分箱生成器。返回的分箱生成器支持方法链,因此此构造函数通常与 bin.value 链起来以分配值访问器。返回的生成器也是一个函数;向它传递数据 以进行分箱。
bin(data)
const bins = d3.bin().value((d) => d.culmen_length_mm)(penguins);
将给定的data样本的迭代器进行分箱。返回一个分箱数组,其中每个分箱都是一个包含输入data中相关元素的数组。因此,分箱的length
是该分箱中元素的数量。每个分箱都有两个额外的属性
x0
- 分箱的下界(包含)。x1
- 分箱的上界(不包含,最后一个分箱除外)。
给定的data 中的任何空值或不可比较的值,或那些超出 域 的值,都会被忽略。
bin.value(value)
const bin = d3.bin().value((d) => d.culmen_length_mm);
如果指定了value,则将值访问器设置为指定的函数或常量,并返回此分箱生成器。
bin.value() // (d) => d.culmen_length_mm
如果未指定value,则返回当前值访问器,默认值为恒等函数。
当分箱 生成 时,值访问器将针对输入数据数组中的每个元素调用,传递元素d
、索引i
和数组data
作为三个参数。默认值访问器假定输入数据是可排序的(可比较的),例如数字或日期。如果您的数据不可排序,则您应该指定一个访问器,该访问器为给定数据返回相应的可排序值。
这类似于在调用分箱生成器之前将您的数据映射到值,但它具有以下优点:输入数据仍然与返回的分箱相关联,从而更轻松地访问数据的其他字段。
bin.domain(domain)
const bin = d3.bin().domain([0, 1]);
如果指定了domain,则将域访问器设置为指定的函数或数组,并返回此分箱生成器。
bin.domain() // [0, 1]
如果未指定domain,则返回当前域访问器,默认值为 extent。分箱域定义为一个数组 [min, max],其中min 是最小可观察值,max 是最大可观察值;这两个值都包含在内。当分箱 生成 时,域之外的任何值都会被忽略。
例如,要使用 线性刻度 x
的分箱生成器,您可以这样说
const bin = d3.bin().domain(x.domain()).thresholds(x.ticks(20));
然后,您可以从数字数组中计算分箱,如下所示
const bins = bin(numbers);
如果使用默认的 extent 域,并且 阈值 指定为计数(而不是显式值),则计算的域将被 美化,以使所有分箱的宽度一致。
请注意,域访问器在物化的 值 数组上调用,而不是在输入数据数组上调用。
bin.thresholds(thresholds)
const bin = d3.bin().thresholds(20);
如果thresholds 指定为一个数字,则 域 将被均匀地划分为大约这么多分箱;参见 刻度。
const bin = d3.bin().thresholds([0.25, 0.5, 0.75]);
如果thresholds 指定为一个数组,则将阈值设置为指定的值,并返回此分箱生成器。阈值定义为一个值数组 [x0, x1, …]。任何小于x0 的值都将被放入第一个分箱;任何大于或等于x0 但小于x1 的值都将被放入第二个分箱;依此类推。因此,生成的分箱 将有thresholds.length + 1 个分箱。任何超出 域 的阈值都会被忽略。第一个bin.x0 始终等于最小域值,最后一个bin.x1 始终等于最大域值。
const bin = d3.bin().thresholds((values) => [d3.median(values)]);
如果thresholds 指定为一个函数,则该函数将传递三个参数:从数据中导出的输入 值 数组,以及表示为min 和max 的 域。然后,该函数可以返回数字阈值数组或分箱数;在后一种情况下,域将被均匀地划分为大约count 个分箱;参见 刻度。例如,您可能希望在对时间序列数据进行分箱时使用时间刻度;参见 示例。
bin.thresholds() // () => [0, 0.5, 1]
如果未指定thresholds,则返回当前阈值生成器,默认情况下,它实现 Sturges 公式。(因此,默认情况下,要分箱的值必须是数字!)
thresholdFreedmanDiaconis(values, min, max)
const bin = d3.bin().thresholds(d3.thresholdFreedmanDiaconis);
源代码 · 根据 Freedman–Diaconis 规则 返回分箱数;输入values 必须是数字。
thresholdScott(values, min, max)
const bin = d3.bin().thresholds(d3.thresholdScott);
源代码 · 根据 Scott 的正态参考规则 返回分箱数;输入values 必须是数字。
thresholdSturges(values, min, max)
const bin = d3.bin().thresholds(d3.thresholdSturges);
源代码 · 根据 Sturges 公式 返回分箱数;输入values 必须是数字。