图形布局:重新布局保留绘图的形状

Posted

技术标签:

【中文标题】图形布局:重新布局保留绘图的形状【英文标题】:Graph Layout : re-layout preserving the shape of the drawing 【发布时间】:2012-02-24 05:11:31 【问题描述】:

我想绘制一个由节点和边组成的,使用spring布局算法(一种力导向布局) 一旦图表布局好,我想让用户交互地添加新节点,并让布局演变,即在保持之前的“形状”的同时定位新节点(不移动已经定位节点太多)。

我的意思类似于 WordVis 在http://www.wordvis.com 所做的事情。

我目前正在使用 GraphDracula 库中提供的 spring 布局器。这是一个“简单”的,这意味着如果你重新布局图形,你可能会得到一个完全不同的布局(我认为这是由于算法中对Math.rand 的调用)

做我想做的事情的算法/策略是什么?

我看到 graphdracula 的布局器将初始节点位置设置为零,然后迭代计算最终节点的位置。 假设我添加一组节点newNodesexpandedNode: 相邻,以保持现有形状,是否足以将每个newNodes 的初始位置设置为expandedNode 的一个,然后施加力再次到所有节点?

您是否有任何指向算法的指针,该算法不仅可以对图形进行一次布局,而且还可以让您添加新节点来重新布局整个图形而无需过多更改绘图?

欢迎任何提示。

我目前正在使用 javascript,但语言并不重要。

【问题讨论】:

【参考方案1】:

您可以为此使用Gephi:

    导入您的图表 在“布局”面板中,使用 ForceAtlas 渲染图表,然后停止布局。 选择所有节点,右键单击并“设置”节点。他们不会动。 添加新节点和链接。 再次运行相同的布局。

当然,这不是一个完美的解决方案,但如果不添加太多新节点来连接图的不同区域,这个技巧会很有效。

【讨论】:

以上是关于图形布局:重新布局保留绘图的形状的主要内容,如果未能解决你的问题,请参考以下文章

为什么android studio会自动在图形布局编辑器中重新排序视图和元素

使用新数据重新渲染 D3 强制定向布局

创建一个图形,其中包含按 gridspec 布局排列的绘图、滑块和其他小部件

R语言绘图002-页面布局

图形自动布局算法

R语言layout()函数绘图指定复杂的图形布局