gpt4 book ai didi

graphviz - 在 Graphviz 中对齐子图、排序节点和重新定位边

转载 作者:行者123 更新时间:2023-12-04 23:48:35 26 4
gpt4 key购买 nike

我正在尝试绘制一个 GraphViz 图(使用版本 2.38.0 (20140413.2041) ),并且很难按照我想要的方式布置它。我已经尝试了许多不同的隐藏边、约束操作、子图(集群和非集群)等组合,但似乎没有做我想要的。

这是我当前的代码:

digraph G {
subgraph clustera {
style=invis;rank=same
A->B->C
}

subgraph clusterb {
style=invis;rank=same;rankdir=LR
D->E [constraint=false]
}

subgraph clusterc {
style=invis;rank=same
F->G [constraint=false]
}

C -> D
D -> F [constraint=false]
E -> C

F -> A [constraint=false]
F -> C [constraint=false]
F -> E [constraint=false]
}

这是它如何使用 dot -Tpng 进行渲染:

current dot graph

(所有 F 边都关闭了“约束”,因为几乎任何其他东西都会严重扭曲图形。)

我想要的是:
  • 节点F节点上方G
  • FG或多或少在图形上垂直居中
  • FGA 的右侧通过 E
  • A通过 E或多或少是他们现在的安排
  • 来自 F 的边缘至 A , C , 和 E ,来自 DF ,或多或少遵循直线(即不绕 F/G 组的右侧布线)
  • 作为奖励,我想得到 A通过 C正确居中 DE ,但这并不重要

  • (我非常不希望 F 出现在 A 上方,就好像它是图的根一样。)

    这是我正在寻找的近似值,在 yEd 中手工布置:

    yEd graph

    这在 GraphViz 中可行吗?

    (我应该注意,我非常愿意使用其他 GraphViz 工具之一,只是 dot 是我唯一熟悉的工具。)

    最佳答案

    这是我的方法,没有 subgraphsweigth s,只有 group s 垂直对齐节点,和 constraint=false以及 dir=back以保留布局失真。

    digraph G {
    // nodes without a group
    D;
    E;

    // group left side
    node[group=left];
    A -> B -> C -> D;
    C -> E [dir=back];
    D -> E [constraint=false];

    // group right side
    node[group=right];
    F -> G;

    // inter group edges
    F -> C;
    edge [constraint=false];
    D -> F;
    F -> A;
    F -> E;
    }

    result can be seen here并对应于您的近似值。

    关于graphviz - 在 Graphviz 中对齐子图、排序节点和重新定位边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28388939/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com