Javascript 添加基于D3 circle pack的可重用模块的出口转换
我有一个基于 我在node元素上添加了一个exit转换,但它似乎只对一个数据集有效,而对另一个数据集无效 基本上,为了模拟数据更新,我用Javascript 添加基于D3 circle pack的可重用模块的出口转换,javascript,d3.js,transition,circle-pack,Javascript,D3.js,Transition,Circle Pack,我有一个基于 我在node元素上添加了一个exit转换,但它似乎只对一个数据集有效,而对另一个数据集无效 基本上,为了模拟数据更新,我用setInterval调用一个函数,方法如下: function test(){ d3.select('#vis') .datum(data2) .call(cluster); } setInterval(test, 1500); c.exit().transition() .duration(700)
setInterval
调用一个函数,方法如下:
function test(){
d3.select('#vis')
.datum(data2)
.call(cluster);
}
setInterval(test, 1500);
c.exit().transition()
.duration(700)
.attr("r", function(d){ return 0; })
.remove();
…我以这种方式添加了过渡:
function test(){
d3.select('#vis')
.datum(data2)
.call(cluster);
}
setInterval(test, 1500);
c.exit().transition()
.duration(700)
.attr("r", function(d){ return 0; })
.remove();
您可以在文件底部找到数据更新部分,并在第431行找到退出转换处理
你能检查一下有什么问题吗 您看到的行为是由D3中的数据匹配方式引起的。对于其中一个数据集,所有的数据元素都与现有的DOM元素匹配,因此
exit
选择是空的——您只需更新现有元素的位置、维度等
“修复”这一问题的方法是明确地告诉D3您希望数据如何匹配——例如,将第424行更改为
.data(nodes, function(d) { return d.name; });
它将比较名称
,以确定数据元素是否由DOM元素表示。修改的jsfiddle