0

我正在浏览 Mike Bostock 的 marimekko 图代码,如下所示: https ://bl.ocks.org/mbostock/1005090

我有几个关于我不理解的代码段的问题:

var sum = segments.reduce(function(v, p) {
  return (p.offset = v) + (p.sum = p.values.reduceRight(function(v, d) {
    d.parent = p;
    return (d.offset = v) + d.value;
 }, 0));
}, 0);

这一个,我收集与计算条形图的翻译有关,但我真的不明白它在计算或做什么。v 和 p 是什么?我知道 d 和 i 是什么作为函数参数,但还没有见过 v 和 p。

我将如何将 x 轴刻度标签更改为不是百分比,而是作为段总和的绝对值?
我想我需要更新 x 函数以将值的域更改为等于细分市场内市场的总和,但每个市场都不同,所以我可以像在示例中看到的那样对数据进行最大值.

4

1 回答 1

0

v是前一个 ( v ) 值,它在数据数组的每次迭代中传递以生成整体sum. 是p( p )arent (如内部reduceRight函数所见。)

总体减少的目的是确定单个(总)总和值,以将每个市场段的偏移除以将每个市场段定位在 x 轴上。它还返回每个段的总和p.sum(在父段中)以确定每个段的 y 偏移量。

数据被转换成这样的东西:

key: "Almond lovers"

offset: 0

sum: 6400

values: Array (4)
0 {market: "Auburn, AL", segment: "Almond lovers", value: 3840, parent: Object, offset: 2560}
1 {market: "Birmingham, AL", segment: "Almond lovers", value: 1600, parent: Object, offset: 960}
2 {market: "Gainesville, FL", segment: "Almond lovers", value: 640, parent: Object, offset: 320}
3 {market: "Durham, NC", segment: "Almond lovers", value: 320, parent: Object, offset: 0}
于 2018-12-13T20:01:24.533 回答