Javascript 如何在visjs的分层布局中使节点在y轴上可移动?

Javascript 如何在visjs的分层布局中使节点在y轴上可移动?,javascript,vis.js,Javascript,Vis.js,每当我使用分层布局来布局节点时,只能在x轴上移动它们。我希望节点可以在各个方向上移动。您可以轻松实现这一点 const options = { nodes: { borderWidth: 2 }, edges: {length: 300, smooth: false }, physics: { enabled: false }, layout:{ improvedLayout: true, hiera

每当我使用分层布局来布局节点时,只能在x轴上移动它们。我希望节点可以在各个方向上移动。

您可以轻松实现这一点

const options = {
    nodes: { borderWidth: 2 },
    edges: {length: 300, smooth: false },
    physics: {
        enabled: false
        },
    layout:{
        improvedLayout: true,
        hierarchical: {
            levelSeparation:200, 
            nodeSpacing: 200, 
            treeSpacing:200, 
            }
        },
    interaction: { hover: true }
   }
const network = new vis.Network(container, visData, options);
setTimeout(()=>{
    network.setOptions({
        layout:{
            hierarchical: false
        },
    });
},1000);

另一种选择是在图表渲染一次后关闭层次布局,然后停止任何进一步的模拟

 var network = new vis.Network(container, data, options);

 network.on("stabilized", function () {
   network.stopSimulation();
   network.setOptions({
    "layout": {"hierarchical": {"enabled": false}},                  
    });
  });

  var hasDrawnOnce = false;
  network.on("startStabilizing", function() {
    if(hasDrawnOnce!=false){
      network.stopSimulation(); 
    }
    hasDrawnOnce=true;
  });

我注意到,如果将某些节点固定(不能在任何轴上移动),即使在分层布局中,也可以在两个轴上移动大多数节点。
尝试将
{fixed:True}
添加到一个节点,然后尝试移动其余节点。

如果可以在两个轴上移动它们,那么它将不再是分层布局。如果你不想约束一个轴,你应该使用默认的布局。谢谢你的评论。我希望以层次顺序(或布局,如果您愿意)显示图形,但在布局(和稳定等)后,我可以随节点向各个方向移动(让用户以后自由操作)。我相信,在加载网络时,可以明确指定每个节点的初始位置。我可以想象一个解决方案,在分层模式下创建网络,然后以编程方式获得每个节点的x,y位置,然后使用前面计算的显式位置在标准模式下重新加载网络。我使用了您的想法,稍加修改,但它可以工作;)我仍然认为,它应该用更少的工作量来完成(我不明白为什么y轴是固定的,不能切换成可移动的)。但是谢谢你!这对我不起作用,但上面的一个起了作用。不过我觉得你的应该管用!我可能只是把它设置错了。