跳至内容

数据汇总

计算汇总统计数据。

count(iterable, accessor)

js
d3.count(penguins, (d) => d.body_mass_g) // 342

示例 · 源代码 · 返回指定iterable中有效数字值的个数(即,非空、非NaN或非undefined);接受访问器。

min(iterable, accessor)

示例 · 源代码 · 使用自然顺序返回给定iterable中的最小值。

js
d3.min([3, 2, 1, 1, 6, 2, 4]) // 1

Math.min不同,d3.min不会将输入强制转换为数字;例如,字符串["20", "3"]的最小值为"20",而数字[20, 3]的最小值为3

js
d3.min(["bob", "alice", "carol"]) // "alice"
js
d3.min([new Date("2018-01-01"), new Date("2011-03-09")]) // 2011-03-09

与 Math.min 不同,此方法会忽略 undefined、null 和 NaN 值,这对忽略缺失数据很有用。

js
d3.min([3, 2, 1, NaN, 4]) // 1

可以指定一个可选的访问器函数,这类似于在计算最小值之前调用Array.from。访问器函数会重复地传递给定可迭代对象中的一个元素(通常是d)和零基索引(i)。

js
d3.min(alphabet, (d) => d.frequency) // 0.00074

由于会忽略 undefined 值,因此可以使用访问器函数来忽略值。例如,要获取非 Z 的最不常见字母的频率

js
d3.min(alphabet, (d) => d.letter === "Z" ? NaN : d.frequency) // 0.00095

如果可迭代对象不包含任何可比较的值,则返回 undefined。

js
d3.min([]) // undefined
js
d3.min(alphabet, (d) => d.doesnotexist) // undefined

另请参阅 extentleast

minIndex(iterable, accessor)

源代码 · 与min类似,但返回最小值的索引,而不是值本身。

js
d3.minIndex([3, 2, 1, 1, 6, 2, 4]) // 2

此方法可以根据给定的访问器找到最小的元素,类似于least

js
d3.minIndex(alphabet, (d) => d.frequency) // 25
js
alphabet[d3.minIndex(alphabet, (d) => d.frequency)] // {letter: "Z", frequency: 0.00074}

另请参阅 leastIndex

max(iterable, accessor)

示例 · 源代码 · 使用自然顺序返回给定iterable中的最大值。

js
d3.max([3, 2, 1, 1, 6, 2, 4]) // 6

Math.max不同,d3.max不会将输入强制转换为数字;例如,字符串["20", "3"]的最大值为"3",而数字[20, 3]的最大值为20

js
d3.max(["bob", "alice", "carol"]) // "carol"
js
d3.max([new Date("2018-01-01"), new Date("2011-03-09")]) // 2018-01-01

与 Math.max 不同,此方法会忽略 undefined、null 和 NaN 值,这对忽略缺失数据很有用。

js
d3.max([3, 2, 1, NaN, 4]) // 4

可以指定一个可选的访问器函数,这类似于在计算最大值之前调用Array.from。访问器函数会重复地传递给定可迭代对象中的一个元素(通常是d)和零基索引(i)。

js
d3.max(alphabet, (d) => d.frequency) // 0.12702

由于会忽略 undefined 值,因此可以使用访问器函数来忽略值。例如,要获取非 E 的最常见字母的频率

js
d3.max(alphabet, (d) => d.letter === "E" ? NaN : d.frequency) // 0.09056

如果可迭代对象不包含任何可比较的值,则返回 undefined。

js
d3.max([]) // undefined
js
d3.max(alphabet, (d) => d.doesnotexist) // undefined

另请参阅 extentgreatest

maxIndex(iterable, accessor)

源代码 · 与max类似,但返回最大值的索引,而不是值本身。

js
d3.maxIndex([3, 2, 1, 1, 6, 2, 4]) // 2

此方法可以根据给定的访问器找到最大的元素,类似于greatest

js
d3.maxIndex(alphabet, (d) => d.frequency) // 0
js
alphabet[d3.maxIndex(alphabet, (d) => d.frequency)] // {letter: "E", frequency: 0.12702}

另请参阅 greatestIndex

least(iterable, comparator)

示例 · 源代码 · 根据指定的comparator返回指定iterable的最小元素。

js
d3.least(alphabet, (a, b) => a.frequency - b.frequency) // {letter: "Z", frequency: 0.00074}
js
d3.least(alphabet, (a, b) => b.frequency - a.frequency) // {letter: "E", frequency: 0.12702}

如果comparator接受一个参数,则解释为访问器,并使用自然顺序比较返回的元素。

js
d3.least(alphabet, (d) => d.frequency) // {letter: "Z", frequency: 0.00074}
js
d3.least(alphabet, (d) => -d.frequency) // {letter: "E", frequency: 0.12702}

如果未指定comparator,则默认为ascending

js
d3.least(alphabet.map((d) => d.frequency)) // 0.00074

如果给定的iterable不包含任何可比较的元素(即,比较器在比较每个元素时返回 NaN),则返回 undefined。

js
d3.least([]) // undefined

此函数类似于min,除了它允许使用比较器而不是访问器。

leastIndex(iterable, comparator)

源代码 · 返回指定iterable的最小元素的索引,根据指定的comparatoraccessor。如果给定的iterable不包含任何可比较的元素(即,比较器在比较每个元素时返回 NaN),则返回 -1。如果未指定comparator,则默认为ascending。例如

js
const array = [{foo: 42}, {foo: 91}];
d3.leastIndex(array, (a, b) => a.foo - b.foo); // 0
d3.leastIndex(array, (a, b) => b.foo - a.foo); // 1
d3.leastIndex(array, (d) => d.foo); // 0

此函数类似于minIndex,除了它允许使用比较器而不是访问器。

greatest(iterable, comparator)

示例 · 源代码 · 根据指定的comparatoraccessor返回指定iterable的最大元素。如果给定的iterable不包含任何可比较的元素(即,比较器在比较每个元素时返回 NaN),则返回 undefined。如果未指定comparator,则默认为ascending。例如

js
const array = [{foo: 42}, {foo: 91}];
d3.greatest(array, (a, b) => a.foo - b.foo); // {foo: 91}
d3.greatest(array, (a, b) => b.foo - a.foo); // {foo: 42}
d3.greatest(array, (d) => d.foo); // {foo: 91}

此函数类似于max,除了它允许使用比较器而不是访问器。

greatestIndex(iterable, comparator)

源代码 · 返回指定iterable的最大元素的索引,根据指定的comparatoraccessor。如果给定的iterable不包含任何可比较的元素(即,比较器在比较每个元素时返回 NaN),则返回 -1。如果未指定comparator,则默认为ascending。例如

js
const array = [{foo: 42}, {foo: 91}];
d3.greatestIndex(array, (a, b) => a.foo - b.foo); // 1
d3.greatestIndex(array, (a, b) => b.foo - a.foo); // 0
d3.greatestIndex(array, (d) => d.foo); // 1

此函数类似于maxIndex,除了它允许使用比较器而不是访问器。

extent(iterable, accessor)

示例 · 源代码 · 使用自然顺序返回给定iterable中的最小值最大值

js
d3.extent([3, 2, 1, 1, 6, 2, 4]) // [1, 6]

可以指定一个可选的访问器函数,这相当于在计算范围之前调用 Array.from。

js
d3.extent(alphabet, (d) => d.frequency) // [0.00074, 0.12702]

如果可迭代对象不包含任何可比较的值,则返回 [undefined, undefined]。

js
d3.extent(alphabet, (d) => d.doesnotexist) // [undefined, undefined]

mode(iterable, accessor)

示例 · 源代码 · 返回给定iterable的众数,即出现次数最多的值。忽略 undefined、null 和 NaN 值。

js
d3.mode([1, 2, 2, 2, 3, 3]) // 2

可以指定一个可选的访问器函数,这相当于在计算众数之前调用 Array.from。

js
d3.mode(penguins, (d) => d.island) // "Biscoe"

在相等的情况下,返回第一个相关值。如果可迭代对象不包含任何可比较的值,则返回 undefined。

sum(iterable, accessor)

示例 · 源代码 · 返回给定数字iterable的总和。忽略 undefined、null 和 NaN 值。

js
d3.sum([1, 2, 2, 2, NaN, 3, null]) // 10

可以指定一个可选的访问器函数,这相当于在计算总和之前调用 Array.from。

js
d3.sum(penguins, (d) => d.body_mass_g) // 1437000

如果可迭代对象不包含任何数字,则返回 0。另请参阅 fsum

mean(iterable, accessor)

示例 · 源代码 · 返回给定可迭代数字的平均值。忽略 undefined、null 和 NaN 值。

js
d3.mean([1, 2, 2, 2, NaN, 3, null]) // 2

可以指定一个可选的访问器函数,它等同于在计算平均值之前调用 Array.from。

js
d3.mean(penguins, (d) => d.body_mass_g) // 4201.754385964912

如果可迭代对象不包含任何数字,则返回 undefined。

median(iterable, accessor)

示例 · 源代码 · 使用R-7 方法返回给定可迭代数字的中位数。忽略 undefined、null 和 NaN 值。

js
d3.median([1, 2, 2, 2, NaN, 3, null]) // 2

可以指定一个可选的访问器函数,它等同于在计算中位数之前调用 Array.from。

js
d3.median(penguins, (d) => d.body_mass_g) // 4050

如果可迭代对象不包含任何数字,则返回 undefined。

medianIndex(array, accessor)

源代码 · 与median类似,但返回中位数左侧元素的索引。

js
d3.medianIndex([1, 2, 2, 2, NaN, 3, null]) // 2

cumsum(iterable, accessor)

示例 · 源代码 · 返回给定可迭代数字的累积和,以相同长度的 Float64Array 形式返回。

js
d3.cumsum([1, 1, 2, 3, 5]) // [1, 2, 4, 7, 12]

可以指定一个可选的访问器函数,它等同于在计算累积和之前调用 Array.from。

js
d3.cumsum(penguins, (d) => d.body_mass_g) // [3750, 7550, 10800, 10800, …]

此方法忽略 undefined 和 NaN 值;这对于忽略缺失数据很有用。如果可迭代对象不包含任何数字,则返回零。另请参见fcumsum

quantile(iterable, p, accessor)

示例 · 源代码 · 返回给定可迭代数字的p-分位数,其中p是 [0, 1] 范围内的数字。例如,中位数可以使用p = 0.5 计算,第一四分位数使用p = 0.25 计算,第三四分位数使用p = 0.75 计算。此特定实现使用R-7 方法,这是 R 编程语言和 Excel 的默认方法。

js
const numbers = [0, 10, 30];
d3.quantile(numbers, 0); // 0
d3.quantile(numbers, 0.5); // 10
d3.quantile(numbers, 1); // 30
d3.quantile(numbers, 0.25); // 5
d3.quantile(numbers, 0.75); // 20
d3.quantile(numbers, 0.1); // 2

可以指定一个可选的访问器函数,它等同于在计算分位数之前调用array.map

quantileIndex(array, p, accessor)

源代码 · 与quantile类似,但返回p左侧的索引。

quantileSorted(array, p, accessor)

示例 · 源代码 · 与quantile类似,但期望输入是已排序array值。与quantile相比,访问器仅在计算分位数所需的元素上调用。

rank(iterable, comparator)

示例 · 源代码 · 返回一个数组,其中包含可迭代对象中每个值的排名,,可迭代对象排序后值的零索引。空值排序到末尾并排名为 NaN。可以指定一个可选的比较器访问器函数;后者等同于在计算排名之前调用array.map。如果未指定比较器,则默认为ascending。平局(等效值)都获得相同的排名,定义为该值第一次出现的时间。

js
d3.rank([{x: 1}, {}, {x: 2}, {x: 0}], d => d.x); // [1, NaN, 2, 0]
d3.rank(["b", "c", "b", "a"]); // [1, 3, 1, 0]
d3.rank([1, 2, 3], d3.descending); // [2, 1, 0]

variance(iterable, accessor)

示例 · 源代码 · 使用Welford 算法返回给定可迭代数字的总体方差的无偏估计。如果可迭代对象少于两个数字,则返回 undefined。可以指定一个可选的访问器函数,它等同于在计算方差之前调用 Array.from。此方法忽略 undefined 和 NaN 值;这对于忽略缺失数据很有用。

deviation(iterable, accessor)

示例 · 源代码 · 返回标准差,定义为偏差校正方差的平方根,即给定可迭代数字的标准差。如果可迭代对象少于两个数字,则返回 undefined。可以指定一个可选的访问器函数,它等同于在计算标准差之前调用 Array.from。此方法忽略 undefined 和 NaN 值;这对于忽略缺失数据很有用。

every(iterable, test)

源代码 · 如果给定测试函数对给定可迭代对象中的每个值都返回 true,则返回 true。此方法在测试返回非真值或所有值都迭代完后立即返回。等效于array.every

js
d3.every(new Set([1, 3, 5, 7]), x => x & 1) // true

some(iterable, test)

源代码 · 如果给定测试函数对给定可迭代对象中的任何值都返回 true,则返回 true。此方法在测试返回真值或所有值都迭代完后立即返回。等效于array.some

js
d3.some(new Set([0, 2, 3, 4]), x => x & 1) // true