我在点击前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();
});
这些代码有什么问题?它不起作用
答案 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)
dimension.top()
返回顶行,而不是顶值/键。因此,您无法将结果直接传递给chart.filter()
;你需要从行中提取hastane
。 您正在过滤单个值。也许你的意思是过滤范围。假设hastane
是该行的字段:
hastaneDim.filterRange([h [9] .hastane,h [0] .hastane]);