0

我有以下图表:

digraph {
  stylesheet = "..."
  subgraph cluster {
    b; c; g;
    {rank=same; b; g;}
  }
  a -> b;
  b -> c;
  c -> d;
  c -> e;
  f -> c;
  {rank=same; a; f;}
}

在此处输入图像描述

有没有办法强制/鼓励边缘f -> c在节点之间b通过g?我尝试了许多不同的策略,graphviz 拒绝这两种策略:

  • 保持在边界内,b并且g
  • 允许g出现在一边,不干扰图形的其余部分。

我们欢迎所有的建议!

4

1 回答 1

1

实际上,算法不想按照您的意愿路由f->c边缘。但是,neato边缘路由算法会产生更接近的结果。所以我们使用dot来定位节点,并使用neato -n来路由边缘。像这样:

dot -Tdot myfile.gv >out.dot
neato -n -Tpng out.dot >myfile.png

使用此输入:

 digraph {
  stylesheet = "https://g3doc.corp.google.com/frameworks/g3doc/includes/graphviz-style.css"
  nodesep=.5  // optional
  subgraph cluster {
    b 
    c; g 
    {rank=same; b; g;}
  }

  f -> g [style=invis]
  f:se -> c:nw [constraint=false]

  a -> b;
  b -> c;
  c -> d;
  c -> e;
}

给予:
在此处输入图像描述

请参阅https://graphviz.org/faq/#FaqDotWithNodeCoords
https://graphviz.org/docs/outputs/canon/

(足够接近?)

于 2021-08-27T17:08:35.847 回答