我正在尝试编写自己的函数来衡量d3 v4强制有向图的链接。
默认强度函数为here,根据readme,可以通过传递新函数作为参数来更改它。 (请注意,自述文件中的函数与实际代码中的函数略有不同。)
这是我想要工作的代码的一部分:
var simulation = d3.forceSimulation()
.force("link", d3.forceLink()
.distance(60)
.id(function (d) { return d.name;})
.strength( function (link) {/* my code here */}))
我尝试用默认值替换评论:
function (link) { return 1 / Math.min(count[link.source.index],
count[link.target.index]); }
没有成功。
答案 0 :(得分:0)
很难从您提供的示例中看出,但您需要将哪些链接传递给模拟forceLink函数。如果您的示例实际上成功构建链接,您可以考虑外部化计算,然后从内部链接调用该函数:这是一个适合我的示例。
var weightScale = d3.scaleLinear()
.domain(d3.extent(edges, function (d) { return d.weight }))
.range([.1, 1])
graph = d3.forceSimulation()
.nodes(nodes)
.force("charge", d3.forceManyBody()
.strength(-75) // -1000
.distanceMax([250]))
.force("link", d3.forceLink()
.links(edges)
.id(function(d) { return d.index })
.strength (function (d) {return weightScale(d.weight)})
.distance(55))
.force("center", d3.forceCenter(250, 250)) // width / 2, height / 2
.on("tick", forceTick);
我在链接权重上使用了一个比例weightScale
,在.strenght
内调用。
您可以传递这样的链接:
.force("link", d3.forceLink(*YOURLINKS*)
或者这个:
.force("link", d3.forceLink()
.links(*YOURLINKS*)