我正在查看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函数以将值的域更改为等于细分市场中的市场总和,但是每个市场都不相同,因此我可以像在示例中看到的那样对数据进行最大值
答案 0 :(得分:0)
v
是在数据数组中每次迭代传递的上一个( v )代数,以生成整体sum
。 p
是( p )弧(如内部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}