【问题标题】:dc.js rowChart topN without zerosdc.js rowChart topN 不带零
【发布时间】:2015-01-26 05:24:16
【问题描述】:

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

标准的 dc.js 效果很好,在 rowChart 中使用 .rowsCap(20) 可以让我获得 top20。

当数据过滤到 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 ?

--妮可

【问题讨论】:

标签: dc.js


【解决方案1】:

.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。但这无关紧要,除非组的数量很大。

你的小提琴的工作分支:http://jsfiddle.net/gordonwoodhull/za8ksj45/3/

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

【讨论】:

  • 完美。谢谢戈登。
  • 这将显示一个“其他”栏 - 实际上是隐藏的,即我只能看到标签。有没有办法完全隐藏?此外,“其他”,作为所有值的总和,弄乱了 x 轴域。
  • 作为对我之前评论的回答:“其他”将与“.rowsCap(maxNRows).othersGrouper(false)”一起消失。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多