dc.js图表​​有2个不同的数据集,一个图表更新另一个

时间:2016-12-23 15:49:29

标签: dc.js

我尝试使用dc.js连接两个不同数据集的不同图表。

第一个圆环图应该作为折线图的过滤器,但我还没有找到如何在两者之间建立连接。

我不想加入这些数据集,因为可能会变大,加入并没有多大意义。

我试图抓住所选项目并在折线图中过滤它们

 sobRingChart.on('filtered', function(chart) {
   PUchart.filter(null)
   .filter(chart.filters());
   dc.redrawAll()
});

实施例 http://jsfiddle.net/yccu/qBr7y/32/

2 个答案:

答案 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)

很棒!我已经更新了@YCuvelie示例,并在D3指令中做了一些修改, HERE 是D3.V5的有效示例

而不是d3.scale.linear()使用了d3.scaleLinear(),并包含了最新版本的D3