在强制布局 D3.js 中保持节点之间的动态链接距离
Maintain a dynamic link distance among nodes in force layout D3.js
我正在解析json字符串中每个链接的链接距离。
{
"nodes" : [ {
"name" : "cricket",
"category" : "main",
"id" : 0
}, {
"name" : "record1",
"category" : "twitter",
"id" : 1
}, {
"name" : "record2",
"category" : "web",
"id" : 2
}],
"links" : [ {
"source" : 0,
"target" : 1,
"linkDistance" : 13.17538
}, {
"source" : 0,
"target" : 2,
"linkDistance" : 13.17538
} ]
}
在javascript中,链接距离是一个函数。
var force = d3.layout.force()
.gravity(0.3)
.charge(0)
.size([width,height])
.nodes(jsonstring.nodes)
.links(jsonstring.links)
.linkDistance(function (d) {
return d.linkDistance;
})
.start();
但是节点没有在给定的链接距离内绘制。电荷值为 0。有没有人知道在通过 json 解析时如何保持动态链接距离?
每次编辑d.linkDistance
时,都需要再次调用
force.linkDistance(function (d) {
return d.linkDistance;
})
以使修改生效。
还要记住,链接距离在d3
中只是非常弱的强制,因此根据我的经验,编辑链接距离无论如何都不会对图形布局产生很大影响。您始终可以尝试使用force.linkStrength(10)
或更高的值来增加距离的重要性,但这可能不足以获得精确的正确值。
要尝试的东西:
找到图形的生成树(这给出了一个边的列表,即"骨架"
st
运行以下命令以强制边缘长度正确:
force.on('tick', function() { //consider all edges of a spanning tree, from root to leaves //using links directly instead of st would yield strange results, but depending on your data it might work well enough st.forEach(function(d) { //compute link coordinates var dx = d.target.x - d.source.x; var dy = d.target.y - d.source.y; //ratio desired length / actual length var r = d.linkDistance / Math.sqrt(dx*dx+dy*dy) //add r=Math.sqrt(r) for something smoother (but less constrained) //move target to desired length d.target.x = d.source.x + dx * r; d.target.y = d.source.y + dy * r; }) })
它会严重降低力布局的自然流动(也许r=Math.sqrt(r)
会少一点,但仍然如此),如果你使用它,它会弄乱节点拖动,但它应该在可能的情况下强制一些弧长。
相关文章:
- 节点模块对象范围:在所有函数之间共享一个对象
- 节点中的端点与快速应用程序.js之间的冲突
- 绘制的节点和Google图表/可视化中的数据节点之间的关系
- 节点模块和常规javascript文件之间的区别是什么
- 正在节点d3.js之间创建链接,当前返回Uncaught TypeError:无法读取属性'weight'
- D3Javascript中的力定向图中节点之间的链接
- 节点在服务器之间共享数据&客户
- 如何通过在两个节点之间拖放来制作边缘,并在细胞空间中扩展 egdehandle 扩展.js
- 在强制布局 D3.js 中保持节点之间的动态链接距离
- 突出显示一组节点及其之间的关系
- 单击时在文本之间插入图像节点
- 如何使用javascript在文本之间插入图像节点
- Socket.io 在两个节点.js应用之间触发事件
- 通过 HTTP 在两个节点.js服务器之间传输文件
- 节点加密与加密-js 加密和解密之间的兼容性
- socket.io 和节点.js之间的区别
- D3 力布局:如何保持节点之间的给定最小距离
- D3:对两个节点之间的圆进行动画处理
- 无法在TCP服务器和节点.js之间发送消息
- 节点电报机器人 API,在用户之间进行链对话