如何部分自动布局图形流图
How to partially auto-layout a graphstream graph
如果我对 Graphstream 图中的某些节点有一些固定坐标,我可以将 Graphstream 设置为 "fill in the gaps" 并自动布局那些没有手动指定位置的节点吗?
例如:
Node n1 = graph.addNode("n1");
n1.setAttribute("xy",-0.1,53.35);
Node n2 = graph.addNode("n2");
graph.addEdge("n1n2",n1,n2);
Node n3 = graph.addNode("n3");
n3.setAttribute("xy",-0.4,56.35);
graph.addEdge("n2n3",n2,n3);
鉴于上述情况,n2 没有指定位置。是否可以要求 GraphStream 推断它,而不是因为它不知道它在哪里而不显示它?
如果我使用viewer.disableAutoLayout();
,它不会显示未定位的节点;如果我使用 viewer.enableAutoLayout();
那么它会忽略我的手动节点位置。
有些设置可用于(某种程度上)执行此操作,但推断的位置不是已知位置的平均值。
修改上面的代码:
Node n1 = graph.addNode("n1");
n1.setAttribute("xy",-0.1,53.35);
n1.addAttribute("layout.frozen");
Node n2 = graph.addNode("n2");
graph.addEdge("n1n2",n1,n2);
Node n3 = graph.addNode("n3");
n3.setAttribute("xy",-0.4,56.35);
n3.addAttribute("layout.frozen");
graph.addEdge("n2n3",n2,n3);
SpringBox layout = new SpringBox(false,new Random(0));
viewer.enableAutoLayout(layout);
将 layout.frozen
属性添加到那些位置已知的节点,将防止它们被布局管理器移动。
然而,推断的位置/边长不一定与那些已知的相同。这可以通过在每个节点和每条边上设置一个 layout.weight
属性来调整——作为一个大于 0 的数字。在节点上,这设置了每个节点排斥相邻节点的程度;在边缘上,它是目标边缘长度的乘数。有关详细信息,请参阅 The Documentation。
如果我对 Graphstream 图中的某些节点有一些固定坐标,我可以将 Graphstream 设置为 "fill in the gaps" 并自动布局那些没有手动指定位置的节点吗?
例如:
Node n1 = graph.addNode("n1");
n1.setAttribute("xy",-0.1,53.35);
Node n2 = graph.addNode("n2");
graph.addEdge("n1n2",n1,n2);
Node n3 = graph.addNode("n3");
n3.setAttribute("xy",-0.4,56.35);
graph.addEdge("n2n3",n2,n3);
鉴于上述情况,n2 没有指定位置。是否可以要求 GraphStream 推断它,而不是因为它不知道它在哪里而不显示它?
如果我使用viewer.disableAutoLayout();
,它不会显示未定位的节点;如果我使用 viewer.enableAutoLayout();
那么它会忽略我的手动节点位置。
有些设置可用于(某种程度上)执行此操作,但推断的位置不是已知位置的平均值。
修改上面的代码:
Node n1 = graph.addNode("n1");
n1.setAttribute("xy",-0.1,53.35);
n1.addAttribute("layout.frozen");
Node n2 = graph.addNode("n2");
graph.addEdge("n1n2",n1,n2);
Node n3 = graph.addNode("n3");
n3.setAttribute("xy",-0.4,56.35);
n3.addAttribute("layout.frozen");
graph.addEdge("n2n3",n2,n3);
SpringBox layout = new SpringBox(false,new Random(0));
viewer.enableAutoLayout(layout);
将 layout.frozen
属性添加到那些位置已知的节点,将防止它们被布局管理器移动。
然而,推断的位置/边长不一定与那些已知的相同。这可以通过在每个节点和每条边上设置一个 layout.weight
属性来调整——作为一个大于 0 的数字。在节点上,这设置了每个节点排斥相邻节点的程度;在边缘上,它是目标边缘长度的乘数。有关详细信息,请参阅 The Documentation。