dc.js使用多列行图

时间:2016-11-16 08:46:54

标签: javascript d3.js dc.js

我正在使用How to create a row chart from multiple columns中的代码。

但是我需要获得数据的平均值。我通常通过值访问器执行此操作,但不确定如何使用此功能执行此操作。

function regroup(dim, cols) {
    var _groupAll = dim.groupAll().reduce(
        function(p, v) { // add
            cols.forEach(function(c) {
                p[c] += v[c];
            });
            return p;
        },
        function(p, v) { // remove
            cols.forEach(function(c) {
                p[c] -= v[c];
            });
            return p;
        },
        function() { // init
            var p = {};
            cols.forEach(function(c) {
                p[c] = 0;
            });
            return p;
        });
    return {
        all: function() {
            // or _.pairs, anything to turn the object into an array
            return d3.map(_groupAll.value()).entries();
        }
    };
}

我只需要能够得到每列的当前总和,并根据当前过滤器状态将其除以行数。

代码类似于这个小提琴multi column fiddle

中的代码

1 个答案:

答案 0 :(得分:1)

获取记录计数的最简单方法似乎是使用默认缩减创建另一个crossfilter.groupAll()

var _recordCount = dim.groupAll();

然后,您可以在旋转结果时将每个总和除以当前计数:

    all: function() {
        var count = _recordCount.value();
        // or _.pairs, anything to turn the object into an array
        return d3.map(_groupAll.value())
            .entries().map(function(kv) {
          return {key: kv.key, value: kv.value / count};
        });
    }

这里有更新的小提琴:http://jsfiddle.net/37uET/32/