使用d3.js force-layout定位节点的问题。节点“重新进入”每个数据更新,例如内部

时间:2012-06-29 20:28:14

标签: javascript d3.js visualization force-layout

我前几天曾问过这个问题,但我认为除了paxRoman之外的任何人都没有弄清楚我在问什么,因为没有一个例子很难描述。

然而我们设法找出可能是我的问题,我设法将代码放在bl.ocks.org上,这样你就可以看到我的意思了一个例子!

以下是示例: http://bl.ocks.org/3020018

每次刷新数据时(在此示例中,只需从json文件中读取),将重新创建所有节点并将其重新添加到绘图中。

我想要发生什么

我希望节点能够在不移动的情况下进行更新。

如果新数组中存在一个新节点,它应该就像它们现在一样,如果前一个数组中存在但新内容不存在,它应该会消失。

正如您在示例中看到的那样,这不是正在发生的事情,我无法弄清楚过去一周的原因。

所以我的问题是:

我实际上做错了什么?是我缺少链接吗?问题是什么?我们两个人昨天花了一个多小时看着这个并且无法理解它,我现在花了很多时间在它上面没有太大进展:/

我的旧问题/帖子是still up,但它的制定很糟糕,我没有示例。

感谢您帮助我:)

2 个答案:

答案 0 :(得分:3)

所以,我很确定我已经解决了大部分问题!

归结为我在更新数据时添加/修改节点的方式。我完全忘记了x / y和类似属性,因为我自己没有设置它们,所以每次更新数据时都会添加“新”对象,即使它们实际上并不是新的。

使用$.extend()的一些jQuery魔法我有点工作,但每当我更新数据时它仍然会轻微移动/脉动。

我更新了要点以显示更改。 http://bl.ocks.org/3020018

我仍然想删除那个小小的脉动,所以如果你有任何想法,请告诉我:))

答案 1 :(得分:0)

您是否尝试过设置摩擦参数(您有linkDistance和charge set)?将其设置为0.9将加快找到最终位置,因为我认为如果没有设置它默认为1。它只是一个添加

的情况
.friction(0.9) // or any suitable value closer to 0 - have a play!

希望有所帮助