Javascript 如何在visjs的分层布局中使节点在y轴上可移动?
每当我使用分层布局来布局节点时,只能在x轴上移动它们。我希望节点可以在各个方向上移动。您可以轻松实现这一点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
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轴是固定的,不能切换成可移动的)。但是谢谢你!这对我不起作用,但上面的一个起了作用。不过我觉得你的应该管用!我可能只是把它设置错了。