D3.js dc.js中的筛选器和触发器出现问题-重新绘制不同步
我有两个图:直线图和气泡图。当我点击气泡图时,我希望直线图被更新,以便它只使用与“气泡”相关的数据绘制。这与标准实现不同,在标准实现中,单击将从现有过滤器中添加或删除数据 如果查看图像,您可以看到,尽管选择了“0型”,但绘制的危险(图1中的y比例)并不对应 现在,当我点击“模型5”时,我得到了相反的结果 我当前的实现发布为JSFIDLE。我可以从所附的数据表中看出,我正在实现我想要的,但线图没有正确地重新绘制。事实上,它似乎是用最后一个过滤器重新绘制的,而不是新的过滤器 这个实现是从以下方面进行的:特别是D3.js dc.js中的筛选器和触发器出现问题-重新绘制不同步,d3.js,crossfilter,dc.js,D3.js,Crossfilter,Dc.js,我有两个图:直线图和气泡图。当我点击气泡图时,我希望直线图被更新,以便它只使用与“气泡”相关的数据绘制。这与标准实现不同,在标准实现中,单击将从现有过滤器中添加或删除数据 如果查看图像,您可以看到,尽管选择了“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
};
});
在这些更改之后,我相信代码的行为符合您的要求。非常感谢。我们没有机会检查,但会尽快审阅、重新发布和接受