我想在seriesChart上使用鼠标缩放功能,并让它过滤同一组的其他图表。
当我在seriesChart上使用.mouseZoomable(true)
启用缩放,并缩放图表时,其他图表将变空。
当我在LineChart上启用它时,这不会发生。
以下是一个简单示例:https://codepen.io/udeste/pen/ZKeXmX
(用鼠标缩放第二个图表。一切正常。但是当你缩放第一个图表时,其他图表会变成空白。)
我做错了什么?它是dc.seriesChart
错误吗?
答案 0 :(得分:0)
这是因为dc.seriesChart
要求您提供这个奇怪的维度,但它没有相应地更改过滤器功能。
你这样指定seriesDimension
:
var seriesDimension = ndx.dimension(function(d) {
return [+d.Expt, +d.Hours];
});
但是当你缩放时,dc.coordinateGridMixin
只是使用常规dc.filters.RangedFilter
过滤,它不知道这些二维"多键"。
可能由于系列图需要这种输入,它应该重新定义过滤器处理程序以处理多键。但在此之前,您可以通过提供自己的filterHandler
:
seriesChart.filterHandler(function(dimension, filters) {
if(filters.length === 0) // 1
dimension.filter(null);
else {
console.assert(filters.length===1); // 2
console.assert(filters[0].filterType==='RangedFilter');
dimension.filter(function(d) { // 3
return filters[0][0] <= d[1] && d[1] < filters[0][1];
})
}
});
这是做什么的:
coordinateGridMixin
将始终提供一个dc.filters.RangedFilter
,但谁知道还会发生什么。keyAccessor
使用的密钥部分是否在范围内(而不是将数组与范围进行比较,这将始终返回false)。Here's a working fork of your codepen.
(顺便说一句,看起来这个示例slams into a known issue会删除图表边缘的线段而不是剪切段。如果有更多的点,它就不会那么糟糕。我不要以为我找到了一个好的解决方法。希望我们能很快解决这个问题。)