跳至内容

分组数据

对离散值进行分组。

group(iterable, ...keys)

示例 · 源代码 · 将指定的iterable值分组到一个InternMap中,从key到值的数组。例如,按species字段对penguins示例数据集进行分组

js
const species = d3.group(penguins, (d) => d.species);

要获取species字段为Adelie的元素

js
species.get("Adelie") // Array(152)

如果指定了多个key,则会返回嵌套的 InternMap。例如

js
const speciesSex = d3.group(penguins, (d) => d.species, (d) => d.sex)

要获取物种为Adelie且性别为FEMALE的企鹅

js
speciesSex.get("Adelie").get("FEMALE") // Array(73)

元素将按每个key的第一个实例的顺序返回。

groups(iterable, ...keys)

js
const species = d3.groups(penguins, (d) => d.species); // [["Adelie", Array(152)], …]

等效于group,但返回一个 [key, value] 条目的数组,而不是映射。如果指定了多个key,则每个value将是一个嵌套的 [key, value] 条目的数组。元素将按每个key的第一个实例的顺序返回。

rollup(iterable, reduce, ...keys)

示例 · 源代码 · 将指定的iterable值分组并缩减为一个InternMap,从key到缩减后的值。例如,按species字段对penguins示例数据集进行分组和计数

js
const speciesCount = d3.rollup(penguins, (D) => D.length, (d) => d.species);

要获取物种为Adelie的企鹅数量

js
speciesCount.get("Adelie") // 152

如果指定了多个key,则会返回嵌套的 InternMap。例如

js
const speciesSexCount = d3.rollup(penguins, (D) => D.length, (d) => d.species, (d) => d.sex);

要获取物种为Adelie且性别为FEMALE的企鹅数量

js
speciesSexCount.get("Adelie").get("FEMALE") // 73

元素将按每个key的第一个实例的顺序返回。

rollups(iterable, reduce, ...keys)

js
const speciesCounts = d3.rollups(penguins, (D) => D.length, (d) => d.species); // [["Adelie", 152], …]

等效于rollup,但返回一个 [key, value] 条目的数组,而不是映射。如果指定了多个key,则每个value将是一个嵌套的 [key, value] 条目的数组。元素将按每个key的第一个实例的顺序返回。

index(iterable, ...keys)

使用rollup和一个提取每个组的第一个元素的 reducer,如果组中有多个元素,则会抛出错误。例如,按日期对aapl示例数据集进行索引

js
const aaplDate = d3.index(aapl, (d) => d.Date);

然后,你可以通过日期快速检索值

js
aaplDate.get(new Date("2013-12-31")).Close // 80.145714

元素将按输入顺序返回。

indexes(iterable, ...keys)

类似于index,但返回一个 [key, value] 条目的数组,而不是映射。这可能对任何事情都没有用,但为了与groupsrollups保持对称性而包含在内。

flatGroup(iterable, ...keys)

示例 · 源代码 · 等效于group,但返回一个扁平的 [key0, key1, …, values] 数组,而不是嵌套映射;这对于遍历所有组很有用。

flatRollup(iterable, reduce, ...keys)

示例 · 源代码 · 等效于rollup,但返回一个扁平的 [key0, key1, …, value] 数组,而不是嵌套映射;这对于遍历所有组很有用。

groupSort(iterable, comparator, key)

示例 · 源代码 · 根据指定的key函数对指定的iterable元素进行分组,根据指定的comparator对组进行排序,然后返回一个按排序顺序排列的键数组。例如,按升序的中位数体重对penguins示例数据集的物种进行排序

js
d3.groupSort(penguins, (D) => d3.median(D, (d) => d.body_mass_g), (d) => d.species) // ["Adelie", "Chinstrap", "Gentoo"]

要进行降序排序,请对组值取反

js
d3.groupSort(penguins, (D) => -d3.median(D, (d) => d.body_mass_g), (d) => d.species) // ["Gentoo", "Adelie", "Chinstrap"]

如果传递的是comparator而不是accessori.e.,如果第二个参数是正好接受两个参数的函数),则会要求它比较两个组ab,如果a应该在b之前,则应该返回负值,如果a应该在b之后,则应该返回正值,或者对于部分排序返回零。