我无法获得基于链接值函数的linkDistance和linkStrength来处理曲线链接,我应该如何以及在哪里指定这些参数?
我根据代码
的Curved Links示例制作了JSFiddle.linkDistance(function(d) { return d.value; })
写在两个不同的地方(目前已注释掉,因为它在任何一个地方都不起作用)。我最好的猜测是,在指定force.links(链接)之后,它属于较低的位置。我想也许这不起作用,因为d
指的是bilinks而不是链接,所以我把它改成了
.linkDistance(function(d) { return d[3]; })
其中d[3]
是存储在bilinks中的link.value,但也不起作用。两个版本都返回NaN错误。
我希望实现这个改进是简单明了的,所以也许这只是一个我想念的简单而明显的事情。但是我没有尝试过,我在网上找到的任何内容都没有帮助我在几个小时内取得任何进展,所以希望那里的人知道发生了什么以及如何解决它。
答案 0 :(得分:2)
对于 linkDistance 和 linkStrength 函数,您将获得源节点和目标节点,因此根据这一点,您可以返回linkDistance值,在这种情况下我将返回目标节点的权重:
var force = d3.layout.force()
.linkDistance(function(d) { return d.target.weight; })
.linkStrength(function(d) { console.log(d);return 2; })
在你的情况下你做了
.linkDistance(function(d) { return d.value; })
//this is going to return undefined, as there is nothing like that
工作代码here
修改强>
由于您需要链接对象中的链接值,因此在创建链接时添加该值,如下所示:
var nodes = graph.nodes.slice(),
links = [],
bilinks = [];
graph.links.forEach(function (link) {
var s = nodes[link.source],
t = nodes[link.target],
i = {}, // intermediate node
linkValue = link.value // for transfering value from the links to the bilinks
;
nodes.push(i);
links.push({
source: s,
target: i,
linkValue: linkValue //add the link value
}, {
source: i,
target: t,
linkValue: linkValue//add the link value
});
bilinks.push([s, i, t, linkValue]);
});
所以现在在 linkdistance / linkStrength 函数中你可以得到值
var force = d3.layout.force()
.linkDistance(function (d) {
return d.linkValue;
})
.linkStrength(function (d) {
console.log(d.linkValue);
return d.linkValue;
})
工作代码here
希望这有帮助!