【发布时间】:2019-11-27 07:51:30
【问题描述】:
堆积条形图无法在点击任何堆栈时进行过滤
单击任何堆栈时,我需要过滤所有图表,这几天都没有发生和挣扎。
我用链接创建了一个小提琴
http://jsfiddle.net/praveenNbd/09t5fd7v/13/
我觉得我搞砸了 gordonwoodhull 建议的密钥创建。
function stack_second(group) {
return {
all: function () {
var all = group.all(),
m = {};
// build matrix from multikey/value pairs
all.forEach(function (kv) {
var ks = kv.key;
m[ks] = kv.value;
});
// then produce multivalue key/value pairs
return Object.keys(m).map(function (k) {
return {
key: k,
value: m[k]
};
});
}
};
}
我试着按照这个例子https://dc-js.github.io/dc.js/examples/filter-stacks.html
无法弄清楚下面的代码是如何工作的:
barChart.on('pretransition', function (chart) {
chart.selectAll('rect.bar')
.classed('stack-deselected', function (d) {
// display stack faded if the chart has filters AND
// the current stack is not one of them
var key = multikey(d.x, d.layer);
//var key = [d.x, d.layer];
return chart.filter() && chart.filters().indexOf(key) === -1;
})
.on('click', function (d) {
chart.filter(multikey(d.x, d.layer));
dc.redrawAll();
});
});
谁能指出我正确的方向。
感谢您的光临。
【问题讨论】:
-
我很困惑,因为您的小提琴没有任何过滤器堆栈代码。它没有正确过滤的原因是表达式
d.value.count || d.value- 这没有意义,因为当计数为 0 时,您想要显示 0,而不是d.value,它是一个对象。 dc.js 想要一个数字而不是一个对象。 -
也许你可以编辑你的问题和小提琴并添加过滤器堆栈的东西。没有看到您的代码,任何人都很难猜出它为什么不起作用。
-
仅使用 d.value.count 解决了全柱过滤问题。
-
我已经编辑了小提琴并添加了过滤器堆栈的东西,但是 splitkey 功能引起了问题,因为 x 轴有 2 个键。
标签: dc.js crossfilter