【问题标题】:dc.js calculate averages with multi column rowchartdc.js 使用多列行图计算平均值
【发布时间】:2016-11-16 08:46:53
【问题描述】:

我正在使用来自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

【问题讨论】:

    标签: javascript d3.js dc.js


    【解决方案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/

    【讨论】:

    • Hrrrrmmmm,我认为应该是ndx.groupAll(),如上所述。无休止地混淆哪些对象观察哪些过滤器的微妙之处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 2019-04-03
    • 2022-11-14
    • 2015-12-16
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    相关资源
    最近更新 更多