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];
)
这与 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];
)