Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
D3.js 如何控制D3中力定向图的反弹项?_D3.js_Data Visualization_Force Layout_Graph Visualization - Fatal编程技术网

D3.js 如何控制D3中力定向图的反弹项?

D3.js 如何控制D3中力定向图的反弹项?,d3.js,data-visualization,force-layout,graph-visualization,D3.js,Data Visualization,Force Layout,Graph Visualization,我已经能够使用力布局构建一个力定向图。大多数功能都很好,但我遇到的一个大问题是,在开始布局时,它会在页面上到处反弹(在画布边界内外),然后再固定到画布上的位置 我尝试使用alpha来控制它,但似乎不起作用: // Create a force layout and bind Nodes and Links var force = d3.layout.force() .charge(-1000) .nodes(nodeSet) .li

我已经能够使用力布局构建一个力定向图。大多数功能都很好,但我遇到的一个大问题是,在开始布局时,它会在页面上到处反弹(在画布边界内外),然后再固定到画布上的位置

我尝试使用alpha来控制它,但似乎不起作用:

    // Create a force layout and bind Nodes and Links
    var force = d3.layout.force()
        .charge(-1000)
        .nodes(nodeSet)
        .links(linkSet)
        .size([width/8, height/10])
        .linkDistance( function(d) { if (width < height) { return width*1/3; } else { return height*1/3 } } ) // Controls edge length
        .on("tick", tick)
        .alpha(-5) // <---------------- HERE
        .start();
//创建强制布局并绑定节点和链接
var-force=d3.layout.force()
。收费(-1000)
.nodes(节点集)
.链接(链接集)
.尺寸([宽度/8,高度/10])
.linkDistance(函数(d){if(width.alpha(-5)/我也一直在思考这个问题,这就是我提出的解决方案。我使用nodejs离线运行force布局勾选,并将结果节点数据保存到json文件中。

我将其用作布局的新json文件。老实说,我不确定它是否更有效。我想听听您找到的任何解决方案。

节点用随机位置初始化。从文档中可以看到:“如果您不手动初始化位置,则force布局将随机初始化它们,从而导致一些不可预测的行为。”您可以在源代码中看到:

// initialize node position based on first neighbor
function position(dimension, size) {
    ...
    return Math.random() * size;
它们将在画布边界内,但它们可以被力推到外部。您有许多解决方案:

  • 节点可以约束在画布内:
  • 尝试更多的电荷强度和更短的链接,或者更多的摩擦,这样节点的反弹就会更少
  • 可以在不设置节点动画的情况下运行模拟,只显示最终结果
  • 可以初始化节点的位置(但如果将它们全部放置在中心,排斥力将非常大,图形将进一步爆炸):

  • 如果链接/关系的数量从一个渲染更改为另一个渲染,所有这些选项似乎都非常不确定,并且不能保证有效。我会遇到这样的情况:可视化有零个链接,其他极端情况有数千个链接(所有链接都来自一个中心/焦点节点)。关于如何确保每一个极端和介于两者之间的所有事物的一致图形稳定,有什么想法吗?你有没有找到这个问题的答案?我也有同样的问题。
    var n = nodes.length; nodes.forEach(function(d, i) {
        d.x = d.y = width / n * i; });