2015-11-12 46 views
0

每當我使用分層佈局佈局節點時,只能在x軸上移動它們。我希望節點能夠在各個方向上移動。如何使節點在visjs中的分層佈局中的y軸上移動?

+0

如果您可以在兩個軸上移動它們,它將不再是分層佈局。如果你不想約束一個軸,你應該使用默認的佈局。 – bhspencer

+0

感謝您的評論。我想按照層次順序(或佈局,如果你想要)顯示圖形,但是在佈局(以及穩定等)之後,能夠隨節點向各個方向移動(給用戶以後自由操作)。 – lukasinko

+1

我相信可以在加載網絡時明確指定每個節點的初始位置。我可以想象一個解決方案,您可以在分層模式下創建網絡,然後一旦以編程方式解決了每個節點的x,y位置,然後使用您之前計算的顯式位置以標準模式重新加載網絡。 – bhspencer

回答

1

您可以輕鬆實現。

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); 
0

另一種替代方法是在圖表呈現一次後關閉分層佈局,然後停止任何進一步的模擬。

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; 
    });