目前这个堆积条形图根据每个条形的总计从左到右排序。我还如何对每个单独的条形图进行排序,而不是按键对每个单独的条形图进行排序(即 5 岁以下位于底部,65 岁及以上位于顶部),而是按值(最大)对每个单独的条形图进行排序位于底部,最小位于顶部)。
例如:
目前CA栏是这样堆叠的(从下到上)
CA,2704659,4499890,2159981,3853788,10604510,8819342,4114496
我希望它像这样堆叠(从下到上)
CA,10604510,8819342,4499890,4114496,3853788,2704659,2159981
需要明确的是,我需要能够在客户端执行此操作(即不能选择更改原始数据的顺序或格式)。
您链接到的条形图示例直接从 CSV 获取值的顺序(通过色阶域)。实际的堆叠是在这一行完成的:
d.ages = color.domain().map(function(name) { return {name: name, y0: y0, y1: y0 += +d[name]}; });
堆叠顺序取决于名称返回的顺序color.domain()
。要更改顺序,您所需要做的就是对获得的值进行排序。要按各个段的值分别对每个条形图进行排序,您可以使用
var order = color.domain().map(function(d) { return d; })
.sort(function(a, b) { return +d[b] - +d[a]; });
这从色标域中获取名称,然后按值降序对它们进行排序,这些值在sort
功能。这个新数组order
然后用于堆叠:
d.ages = order.map(function(name) { return {name: name, y0: y0, y1: y0 += +d[name]}; });
其余代码保持不变。完整演示here.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)