gpt4 book ai didi

ruby - 复杂的graphviz树结构

转载 作者:数据小太阳 更新时间:2023-10-29 06:43:29 26 4
gpt4 key购买 nike

我正在尝试使用 graphviz 创建树结构。我愿意手动编写 graphviz 代码或使用 ruby​​-graphviz gem for ruby​​。鉴于下图,任何人都可以提供有关必要代码的任何见解吗?忽略线条不是直的……当 graphviz 构建图形时它们应该是。当线相交时,我也愿意接受点/点。

我玩过 ruby​​-graphviz 和家谱类......这让我了解了其中的一部分,但我真的需要所有的线都是直的并且以直角相交并且开箱即用代码似乎没有这样做。

代码应该足够通用,以允许“C”框也有子项,并允许“A”下有更多的子项。

颜色无关紧要...示例可以排除任何着色。

http://docs.google.com/drawings/pub?id=1lUTfgKP_LN0x7C3ItbsFjfLBuDTL84AtmoaW7YFn32Y&w=1036&h=713

最佳答案

有点晚了,我知道,但我只是想展示另一个版本,而不必弄清楚每个节点的确切位置。

digraph {
splines=false;
ranksep=0.05;

node[shape=box, color=lightblue, style=filled];
A;B;C;D;E;

node[shape=none, color=none, style=solid];
i1[label="Item 1"];
i2[label="Item 2"];
i3[label="Item 3"];

node[label="", width=0, height=0];
edge[arrowhead=none, color=blue];

{rank=same; n2; n1; n3;}
n2; n1; n3;
A -> n1;
n2 -> n1 -> n3;

{rank=same; B; C;}
n2 -> B;
n3 -> C;

{rank=same; n4; D;}
B -> n4 -> D;

{rank=same; n6; n5; i1;}
D -> n5 -> i1;
n4 -> n6;

{rank=same; n7; E;}
n6 -> n7 -> E;

{rank=same; n8; i2;}
E -> n8 -> i2;

{rank=same; n9; i3;}
i2 -> n9 -> i3;
}

直线由以下各项强制执行:

  • splines=false - 对样条线说不
  • 不可见节点(节点 n1, n2, ... n9)
  • 将节点放在相同的等级 rank=same

获得正确的点文件仍然需要一些工作,但它胜过恕我直言,自己计算每个节点的位置。

输出看起来像这样:

graphviz output

只要 C 没有子节点,您就必须应用更多技巧(不可见节点)才能将其一直显示到右侧。

为了获得针对不同图形的更通用的解决方案,可能需要进行一些进一步的调整(将权重应用于垂直边缘,或对必须垂直对齐的节点进行分组,或使用子图,...)。

关于ruby - 复杂的graphviz树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2901233/

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