分组数据
对离散值进行分组。
group(iterable, ...keys)
示例 · 源代码 · 将指定的iterable值分组到一个InternMap中,从key到值的数组。例如,按species字段对penguins示例数据集进行分组
const species = d3.group(penguins, (d) => d.species);
要获取species字段为Adelie的元素
species.get("Adelie") // Array(152)
如果指定了多个key,则会返回嵌套的 InternMap。例如
const speciesSex = d3.group(penguins, (d) => d.species, (d) => d.sex)
要获取物种为Adelie且性别为FEMALE的企鹅
speciesSex.get("Adelie").get("FEMALE") // Array(73)
元素将按每个key的第一个实例的顺序返回。
groups(iterable, ...keys)
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示例数据集进行分组和计数
const speciesCount = d3.rollup(penguins, (D) => D.length, (d) => d.species);
要获取物种为Adelie的企鹅数量
speciesCount.get("Adelie") // 152
如果指定了多个key,则会返回嵌套的 InternMap。例如
const speciesSexCount = d3.rollup(penguins, (D) => D.length, (d) => d.species, (d) => d.sex);
要获取物种为Adelie且性别为FEMALE的企鹅数量
speciesSexCount.get("Adelie").get("FEMALE") // 73
元素将按每个key的第一个实例的顺序返回。
rollups(iterable, reduce, ...keys)
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示例数据集进行索引
const aaplDate = d3.index(aapl, (d) => d.Date);
然后,你可以通过日期快速检索值
aaplDate.get(new Date("2013-12-31")).Close // 80.145714
元素将按输入顺序返回。
indexes(iterable, ...keys)
类似于index,但返回一个 [key, value] 条目的数组,而不是映射。这可能对任何事情都没有用,但为了与groups和rollups保持对称性而包含在内。
flatGroup(iterable, ...keys)
示例 · 源代码 · 等效于group,但返回一个扁平的 [key0, key1, …, values] 数组,而不是嵌套映射;这对于遍历所有组很有用。
flatRollup(iterable, reduce, ...keys)
示例 · 源代码 · 等效于rollup,但返回一个扁平的 [key0, key1, …, value] 数组,而不是嵌套映射;这对于遍历所有组很有用。
groupSort(iterable, comparator, key)
示例 · 源代码 · 根据指定的key函数对指定的iterable元素进行分组,根据指定的comparator对组进行排序,然后返回一个按排序顺序排列的键数组。例如,按升序的中位数体重对penguins示例数据集的物种进行排序
d3.groupSort(penguins, (D) => d3.median(D, (d) => d.body_mass_g), (d) => d.species) // ["Adelie", "Chinstrap", "Gentoo"]
要进行降序排序,请对组值取反
d3.groupSort(penguins, (D) => -d3.median(D, (d) => d.body_mass_g), (d) => d.species) // ["Gentoo", "Adelie", "Chinstrap"]
如果传递的是comparator而不是accessor(i.e.,如果第二个参数是正好接受两个参数的函数),则会要求它比较两个组a和b,如果a应该在b之前,则应该返回负值,如果a应该在b之后,则应该返回正值,或者对于部分排序返回零。