dc.js - 单击数据表以过滤其他图表(dc.js)

标签 dc.js

当我点击数据表中的一行时,我需要过滤其他图表。

我做了

my_table.on('pretransition', function (table) {
     table.selectAll('td.dc-table-column')
          .on('click',function(d){
                table.filter(d.key)
                dc.redrawAll();
           })
});

但其他图表没有任何反应。

你能帮帮我吗?

最佳答案

如果表维度是一个维度...

通常填充数据表的数据是原始数据集中的原始行,而不是键/值对。

所以很可能 d.key 是未定义的。

我建议你先坚持

console.log(d)

进入您的点击处理程序以查看您的数据,以确保 d.key 有效。

其次,请记住图表会通过其维度进行过滤。因此,您需要向 table.filter() 传递一个值,该值是您维度的有效键,然后它将过滤掉键不同的所有行。这可能不仅仅是您选择的一行。

通常选择表维度是因为它对行值进行排序的方式。您可能实际上想要过滤其他一些维度。但希望这足以让您入门。

但是如果表格维度是一个组呢?

只有当您的表将交叉过滤器维度作为其维度时,上述技术才有效。如果像您在评论中链接的 fiddle 一样,您使用一个组作为维度,则该对象没有 .filter() 方法,因此 table.filter() 方法不会做任何事情。

如果你只需要过滤被点击的一项,你可以这样做

foodim.filter(d.key)

这个有效果但是没那么有用。

如果您需要 dc 的有序图表中使用的切换功能,则需要模拟它。没那么复杂:

// global
var filterKeys = [];

// inside click event

                if(filterKeys.indexOf(d.key)===-1)
                  filterKeys.push(d.key);
                else
                  filterKeys = filterKeys.filter(k => k != d.key);
                if(filterKeys.length === 0)
                  foodim.filter(null);
                else 
                  foodim.filterFunction(function(d) {
                    return filterKeys.indexOf(d) !== -1;
                  })

fiddle 示例:https://jsfiddle.net/gordonwoodhull/kfmfkLj0/9/

关于dc.js - 单击数据表以过滤其他图表(dc.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44957203/

相关文章:

javascript - d3.js:5942 错误:<g> 属性转换的无效值 ="translate(NaN,0)"

javascript - 如何加载dc.js和crossfilter.js?

javascript - 使用 dc.js 渲染行图时丢失数据

css - 如何调整轴文本 - dc.js

d3.js - 图例标签和颜色更改为黑色 dc.js d3.js

dc.js,防止饼图外部标签重叠

单击第一个图表中的数据点时,dc.js 访问多个图表中的数据点

javascript - dc/crossfilter 行图表对提供图表的数据进行排序

javascript - dc.js 气泡图,沿 x 轴时间线绘制气泡

d3.js - 使用不同颜色的 dc.js 显示原始(有条件)拉丝未拉丝交叉过滤器条