【问题标题】:Planar Graph Layouts平面图布局
【发布时间】:2021-11-08 20:59:54
【问题描述】:

布置图时有哪些边重叠最小化技术? (最好和GraphViz相关)还有什么软件可以平面布局图形?

当前布局 - http://www.evecakes.com/doodles/master.gif

左上角的粉色部分看起来不错,而浅蓝色部分有一些可避免的边缘重叠。

【问题讨论】:

  • 您想知道如何优化graphviz的输出或如何自己实现边缘重叠最小化吗?
  • 主要是前者,但我也对后者感兴趣。
  • 我做了更多的研究,对于我的尺寸图,多尺度布局是唯一的选择。所以目前我正在关注 SFDP。一个重要的 SFDP 属性是级别,它定义了您想要的比例。
  • 原始布局 gif 是 404 - sigh

标签: algorithm graph graphviz graph-layout planar-graph


【解决方案1】:

对于一般图,确定具有最少边交叉的图的平面布局(Crossing Number)的问题是 NP-hard。因此使用了一些启发式方法(如Force based layout 算法)。

下面的页面简要描述了 graphviz 算法,并提出了一些使用它们的方法。它还具有指向 pdf 的链接,其中应包含有关算法的更多信息:

http://rss.acs.unt.edu/Rdoc/library/Rgraphviz/html/GraphvizLayouts.html

希望对您有所帮助。

【讨论】:

  • 链接已损坏。
  • 如果一个图是平面的,那么您可以生成一个零边缘交叉的嵌入(因为这是平面图的定义) - 确定一个图是否是平面的可以在线性O(N) 时间内实现[12] 这是生成嵌入的一个小步骤(也是O(N))。那么对于非平面图,是的,生成具有最小边缘交叉的嵌入是 NP 困难的,但它不能是平面嵌入/布局。
【解决方案2】:

下面的开源 Java 库有一些算法可以帮助布置平面图。 https://github.com/trickl/trickl-graph

特别是,以下类提供了问题的分析解决方案:

ChrobakPayneLayout(基于 Aaron Windsor 的 Boost C++ 实现) http://www.boost.org/doc/libs/1_37_0/libs/graph/doc/straight_line_drawing.html

FoldFreeLayout(基于传感器网络中的无锚分布式定位

  • Nissanka B. Priyantha、Hari Balakrishnan、Erik Demaine 和 Seth Teller)

您可能想要做的是使用这样的东西作为第一次“尝试”,以确保没有重叠,尽管可能看起来不太好。然后,您可以应用力导向算法来更公平地分隔节点。

不幸的是,该库刚刚发布,因此缺乏文档。但是,通过提供一些实际代码而不仅仅是理论,它可能会很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    相关资源
    最近更新 更多