【问题标题】:Fake group filtering in Crossfilter / dc.jsCrossfilter / dc.js 中的假组过滤
【发布时间】:2015-12-21 20:04:50
【问题描述】:

我正在尝试了解 dc.js 常见问题解答 How do I filter the data before it's charted? 中描述的“假组”过滤方法

请在此处查看我的示例:dc.js jsfiddle

我想在绘制图表之前按 TYPE 过滤我的数据(过滤的 TYPE 将来自我的应用程序的另一部分)。基本上它应该与单击行图中的四个条(A,B,C,D)之一具有相同的效果,但我希望能够从我的代码中的其他地方控制它,它应该发生在绘制图表。

我想我需要在我的名为“type”的组上使用Filter out bins by predicate function on the values 方法,例如

function filter_bins(source_group, f) {
return {
    all:function () {
        return source_group.all().filter(function(d) {
            return f(d.value);
        });
    }
};

}

但我不清楚我应该将什么函数作为 f 传递,或者谓词函数是什么。

如果有任何帮助,我将不胜感激!谢谢。

【问题讨论】:

    标签: javascript dc.js crossfilter


    【解决方案1】:

    如果您希望它真正表现得好像在 typeRowChart 中单击了该类型(这可能是您想要的),那么在您想要的任何地方执行此操作:

    typeRowChart.filter("A");
    

    如果您出于某种原因希望 typeRowChart 保持原样(未过滤),但您想过滤 typeDim,然后直接过滤维度并调用 dc.redrawAll()

    typeDim.filter("A");
    dc.redrawAll();
    

    如果您希望 typeRowChart 也被新选择过滤,则创建一个新类型维度并对其进行过滤:

    var typeDim2 = cf.dimension(function (d) {return d.TYPE;});
    typeDim2.filter("A");
    dc.redrawAll();
    

    幸运的是,我认为在这种情况下不需要假组模式。 :-)

    【讨论】:

    • 对,假组就是如果您希望组不显示在屏幕上,但也不过滤。我想常见问题解答使用“过滤器”这个词来表示不同的操作会让人感到困惑,必须考虑一下。
    • 这个答案正是我所需要的,非常感谢!出于好奇,您希望在什么情况下使用假组模式?
    • 如果您想为特定图表排除组但没有全局过滤器,或者为了在单个图表中使用而修改组,您可以使用该模式。在某些情况下,您也可以使用 .data() 函数来执行此操作,但我的理解是有时会踩到其他功能。
    猜你喜欢
    • 2014-08-02
    • 2020-12-31
    • 2015-11-15
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多