我尝试使用dc.js连接两个不同数据集的不同图表。
第一个圆环图应该作为折线图的过滤器,但我还没有找到如何在两者之间建立连接。
我不想加入这些数据集,因为可能会变大,加入并没有多大意义。
我试图抓住所选项目并在折线图中过滤它们
sobRingChart.on('filtered', function(chart) {
PUchart.filter(null)
.filter(chart.filters());
dc.redrawAll()
});
答案 0 :(得分:1)
你有正确的想法,这只是一个数据不匹配。
要理解的重要一点是,crossfilter中的所有过滤都是通过维度对象进行的。您过滤的值需要与您过滤的维度兼容。
因此,由于折线图是基于时间的,因此您无法按Source
进行过滤。您需要设置另一个维度来执行此操作:
var sourceDim2 = spendData2.dimension(function(d) { return d.Source; })
然后过滤该维度而不是折线图:
sobRingChart.on('filtered', function(chart) {
if(chart.filters().length)
sourceDim2.filterFunction(function(k) {
return chart.filters().indexOf(k) !== -1;
});
else sourceDim2.filter(null);
dc.redrawAll()
});
这只是复杂的,因为它必须处理多个值的过滤(当选择多个环形图片时)。 Crossfilter并没有那么简单,可能是因为它不是那么有效。 (通常不重要。)
所以我们需要看看是否有任何过滤器。如果有,我们设置一个过滤函数,查看当前考虑的密钥是否在chart.filters()
中。如果没有,我们致电.filter(null)
清除过滤器。
答案 1 :(得分:0)