我们如何过滤行图dc.js?

时间:2014-12-23 22:38:14

标签: dc.js

我在点击前10个按钮但未显示时尝试过滤前10个元素。

这是我的代码:

hastaneRowChart
        .width(300)
        .height(1000)
        .margins({top: 20, left: 10, right: 10, bottom: 20})
        .transitionDuration(750)
        .dimension(hastaneDim)
        .group(hastaneGroup)
        .colors(d3.scale.category10())
        .valueAccessor(function (p) {return p.value.vaka;})
        .renderLabel(true)
        .gap(9)
        .title(function(p) { return ""; })
        .ordering(function(d) { return -d.value })
        .elasticX(true)
        .xAxis().ticks(5).tickFormat(d3.format("s"));   

点击此处过滤代码:

  $("#top10hast").click(function(){
            var h=hastaneDim.top(10);
            hastaneDim.filter(h[0]);
            dc.filterAll();
    });  

这些代码有什么问题?它不起作用

3 个答案:

答案 0 :(得分:2)

默认情况下,dc使用group.all()

chart.data(function(group) {
   return group.all();
});

尝试提供自己的数据功能:

chart.data(function(group) {
   return group.top(maxItems);
});

$("#top10hast").click(function(){
        var maxItems=10;
        dc.filterAll();
});  

请注意,提供自己的数据功能可能会禁用某些图表上的某些功能。另一种方法是为crossfilter提供自定义过滤器

https://github.com/dc-js/dc.js/wiki/FAQ#filter-the-data-before-its-charted

var filtered_group = filter_top (group)

hastaneRowChart
  .group(filter_top)    

function filter_top(source_group) {
  return {
    all:function () {
        return source_group.top(maxItems);
        });
    }
 };

}

答案 1 :(得分:0)

尝试引用图表而不是尺寸......

function filterz() {
    hastaneRowChart.filter(h[0]);
    dc.redrawAll();
};  

答案 2 :(得分:0)

  1. 过滤图表使用的维度不会影响该图表,只影响其他图表。如果要影响此图表,则需要在同一个键上使用其他维度。
  2. dimension.top()返回顶行,而不是顶值/键。因此,您无法将结果直接传递给chart.filter();你需要从行中提取hastane
  3. 您正在过滤单个值。也许你的意思是过滤范围。假设hastane是该行的字段:

    hastaneDim.filterRange([h [9] .hastane,h [0] .hastane]);