【问题标题】:How to force node position (x and y) in graphviz如何在graphviz中强制节点位置(x和y)
【发布时间】:2011-03-17 19:00:35
【问题描述】:

我正在尝试强制节点的位置。我有节点的 x 和 y 坐标以及它的有向图。我可以使用 rank=same 来处理行(y 坐标),但不知道如何处理列(x 坐标)。

【问题讨论】:

    标签: position graph-theory graphviz dot


    【解决方案1】:

    您可以使用 pos 属性(https://www.graphviz.org/doc/info/attrs.html#d:pos),例如:

    xxx [
        label = xxx
        pos = "0,0!"
    ]
    
    yyy [
        label = yyy
        pos = "10,10!"
    ]
    

    您还必须指定neatofdp 布局引擎,这样dot 命令行将是(对于fdp):

    dot -Kfdp -n -Tpng -o sample.png sample.dot
    

    【讨论】:

    • 我只能通过使用neato -n sample.dot ...(不是 fdp)来让它工作
    • 为什么是感叹号?在手册中找不到任何关于它的内容。而且行为似乎不稳定(使用版本 2.36.0)
    • 那么,它不能与点布局引擎一起使用吗?
    • 任何方式只强制 x 或 y 位置?
    • 运行dot 并覆盖布局引擎对于那些不知道它如何工作并且没有提供任何好处的人来说是相当混乱的?文档特别提到“-K 指定要使用的默认布局算法,覆盖命令名称中的默认值。例如,运行 dot -Kneato 相当于运行neato。”
    【解决方案2】:

    这是我找到的一个例子: https://observablehq.com/@magjac/placing-graphviz-nodes-in-fixed-positions

    基本上可以为节点指定位置属性“pos”。仅适用于neato 或 fdp 布局引擎,不适用于 dot。

    ! 表示该位置是一个输入,不应更改。

    【讨论】:

      【解决方案3】:

      我无法让-n 标志与dot -Kfdp 一起使用。

      但是,我可以使用以下命令使其与neato 一起工作:

      neato sample.dot -n -Tpng -o sample.png

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-20
        • 1970-01-01
        • 1970-01-01
        • 2019-08-29
        • 1970-01-01
        • 2010-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多