dc.js - 从多列创建行图表并启用过滤

dc.js - Creating a row chart from multiple columns and enabling filtering

这与 dc.js - how to create a row chart from multiple columns 类似,但我想更进一步,在单击行时启用过滤。

回答问题 "What is it supposed to filter?" - 仅显示值 > 0 的记录。例如,当单击行 'a' 时,它将仅显示值 > 0 的记录。因此,类型饼图将变为 foo:1、bar:2

我想我必须覆盖 onClick 方法?但我不确定如何。

chart.onClick = function(d) {}

jsfiddle 来自上述问题的答案 - http://jsfiddle.net/gordonwoodhull/37uET/6/

有什么建议吗?

谢谢!

好的,这是一个解决方案,如果记录的任何 selected 行的值 > 0,则包含该记录。正如@Ethan 所说,这是定义过滤器处理程序的问题:

sidewaysRow.filterHandler(function(dim, filters) {
    if(filters && filters.length)
        dim.filterFunction(function(r) {
            return filters.some(function(c) {
                return r[c] > 0;
            });
        })
    else dim.filterAll();
    return filters;
});

此外,由于 filterFunction 只能访问键,我们将整个记录作为键传递。这在 "real world" 中没有多大意义,但由于我们已经在横向使用 crossfilter,它可能没问题:

var dim = ndx.dimension(function(r) { return r; });

新版本fiddle:https://jsfiddle.net/gordonwoodhull/b7cak6xj/

顺便说一句,听起来您一次只想 select 一行。方法如下:

sidewaysRow.addFilterHandler(function(filters, filter) {
  filters.length = 0;
  filters[0] = filter;
  return filters;
})

(这在开发分支上的 dc 2.1 中会更简单,其中图表使用过滤器处理程序的结果而不是要求您就地修改过滤器;正文变得只是 return [filter];