D3.js dc.js中的筛选器和触发器出现问题-重新绘制不同步

D3.js dc.js中的筛选器和触发器出现问题-重新绘制不同步,d3.js,crossfilter,dc.js,D3.js,Crossfilter,Dc.js,我有两个图:直线图和气泡图。当我点击气泡图时,我希望直线图被更新,以便它只使用与“气泡”相关的数据绘制。这与标准实现不同,在标准实现中,单击将从现有过滤器中添加或删除数据 如果查看图像,您可以看到,尽管选择了“0型”,但绘制的危险(图1中的y比例)并不对应 现在,当我点击“模型5”时,我得到了相反的结果 我当前的实现发布为JSFIDLE。我可以从所附的数据表中看出,我正在实现我想要的,但线图没有正确地重新绘制。事实上,它似乎是用最后一个过滤器重新绘制的,而不是新的过滤器 这个实现是从以下方面

我有两个图:直线图和气泡图。当我点击气泡图时,我希望直线图被更新,以便它只使用与“气泡”相关的数据绘制。这与标准实现不同,在标准实现中,单击将从现有过滤器中添加或删除数据

如果查看图像,您可以看到,尽管选择了“0型”,但绘制的危险(图1中的y比例)并不对应

现在,当我点击“模型5”时,我得到了相反的结果

我当前的实现发布为JSFIDLE。我可以从所附的数据表中看出,我正在实现我想要的,但线图没有正确地重新绘制。事实上,它似乎是用最后一个过滤器重新绘制的,而不是新的过滤器

这个实现是从以下方面进行的:特别是
renderlet
on(“过滤的”,函数(图表){
行。但是,为了实现这一点,我不得不注释掉
plot1.filter(chart.filter());
行,用于第二个绘图

我真的不明白为什么需要一个
renderlet
上的(“过滤的”…
上的(“后重绘”…
侦听器一起使用


我已经就这一问题走遍了所有的房子,因此我们将非常感谢您的建议。

我试图简化JSFIDLE以隔离问题。下面是经过修改的JSFIDLE:

您的plot2 keyAccessor从p.value.df访问df值,而不是在df上使用维度。我猜这就是导致问题的原因。下面是调整后的代码:

dfDim = ndx.dimension(function (d) {return d.df;});
...
plot2.width(300)
     .height(250)
     .dimension(dfDim)
我还注意到,您的plot2 valueAccessor和radiusAccessor未使用计算平均值。对于从组中添加或删除的每条记录,您的代码将覆盖est和estse。以下是计算平均值的调整代码:

dfGroup = dfDim.group().reduce(
       //add
       function (p, v) {
           ++p.count;
           p.est += v.est;
           p.avg_est = p.est / p.count;
           p.estse += v.estse;
           p.avg_estse = p.estse / p.count;
           return p;
       },
       //remove
       function (p, v) {
           --p.count;
           p.est -= v.est;
           p.avg_est = p.est / p.count;
           p.estse -= v.estse;
           p.avg_estse = p.estse / p.count;
           return p;
       },
       //init
       function (p, v) {
           return {
               count: 0,
               est: 0,
               estse: 0,
               avg_est: 0,
               avg_estse: 0
           };
       });

在这些更改之后,我相信代码的行为符合您的要求。

非常感谢。我们没有机会检查,但会尽快审阅、重新发布和接受