使用 dc.js / 交叉滤波器绘制平均值



我有一些这样的数据

[
    {type:"a", series:[0.1, 0.2, 0.2, 0.1, -0.1]},
    {type:"b", series:[0.3, 0.4, 0.5, 0.6, 0.7]},
]

类型有一个维度,然后我做一个组,并对每个类型的每个系列求平均值。

有没有一种好方法来绘制每种类型的平均序列?显然,我希望它使用任何新的过滤器进行更新。

我尝试将我的数据展平为

[
    {type:"a", index:0, value:0.1},
    {type:"a", index:1, value:0.2},
    ...
]

并使索引也成为维度。但是当我添加更多数据时,它变得有点慢;我从不过滤索引维度,因此将其添加到交叉过滤器只是额外的成本;最后,它弄乱了每种类型的计数。

试试这个:

var group = typeDimension.group().reduce(reduceAdd, reduceRemove, reduceInitial);
function reduceAdd(p, v) {
    ++p.count
    p.sum += calculateAverage(v['series']);
    p.avg = p.sum / p.count;
    return p;
}
function reduceRemove(p, v) {
    --p.count
    p.sum -= calculateAverage(v['series']);
    p.avg = p.sum / p.count;
    return p;
}
function reduceInitial() {
    return {count: 0, sum: 0, avg: 0};
}
function calculateAverage(numbers) {
    var sum = 0;
    number.forEach(function(num) {
        sum += num;
    });
    return sum / numbers.length;
}

最新更新