dc.js rowChart topN 没有零

dc.js rowChart topN without zeros

我需要显示大型数据集中的前 20 个警报。

标准 dc.js 效果很好,在 rowChart 中使用 .rowsCap(20) 使我获得了前 20 名。

当数据被过滤到 20 个条目以下时,我现在正尝试删除零行。几个类似的已发布问题指向 https://github.com/dc-js/dc.js/wiki/FAQ#filter-the-data-before-its-charted 中的 remove_empty_bins() 如果我删除 .rowsCap(20) 但失败我将两者结合起来,它可以正常工作。

使用 dc.js-2.0.0-beta.1 它在第 3415 行对 group.top(_cap) 调用失败,因为 .top 属性对于由 remove_empty_bins().

在定义假组时尝试添加 .top(20) 时出现同样的错误。

有没有一种简单的方法可以将 remove_empty_bins(original_group) 与 .top() 或 .rowCaps() 结合起来用于 rowChart ?

--妮可

只是把.top(n)加到fake组稍微复杂一点:

function remove_empty_bins(source_group) {
    function non_zero_pred(d) {
        return d.value != 0;
    }
    return {
        all: function () {
            return source_group.all().filter(non_zero_pred);
        },
        top: function(n) {
            return source_group.top(Infinity)
                .filter(non_zero_pred)
                .slice(0, n);
        }
    };
}

效率并不完美,因为这会按排序顺序获取所有组,然后抛出除第一个 n 之外的所有组,而 crossfilter 只能拉取第一个 n 使用堆。但这应该无关紧要,除非组数很大。

你的 fiddle 的工作叉:http://jsfiddle.net/gordonwoodhull/za8ksj45/3/

编辑:请注意,在 dc.js 2.1.2 中不再需要提供 group.top(),因为该功能与 chart.ordering() 重叠并导致令人困惑的错误。 (以及使这些数据预处理器难以编写。)