Graphviz:如何渲染关于某些节点边连接点的图形?

jm6*_*666 5 layout graphviz graph-drawing

我想以与下面相似的布局呈现图形:

通缉

我试过这个:

digraph EDP
{
  graph [colorscheme=paired12];
  node [label="\N", shape=box, style="rounded,filled", colorscheme=paired12, color=8, fillcolor=7, width="1.2", fontname="Arial narrow", fontsize=12];
  edge [colorscheme=paired12, color=8, fontsize=11, fontname="Arial narrow"];

  src [label="Source"];
  dst [label="Destination"];
  filter [label="Filter"];

  src -> dst [label="Encoding process"];
  src -> filter [label="a"];
  filter -> dst [label="b"];
  src -> filter [dir=back, label=c];
  filter -> dst [dir=back, label=d];
  src -> dst [dir=back, label="Decoding process"];

}
Run Code Online (Sandbox Code Playgroud)

产生了以下结果:(不是很好......

我的

谁能告诉我最接近的解决方案?(可能不可能完全相同)

mar*_*pet 9

尽可能接近我之前的一个晚上:

digraph EDP
{
  graph [colorscheme=paired12];

  node [label="\N", shape=box, style="rounded,filled", colorscheme=paired12, color=8, fillcolor=7, width="1.2", fontname="Arial narrow", fontsize=12];
  edge [colorscheme=paired12, color=8, fontsize=11, fontname="Arial narrow"];

  src [width=3.5, label="Source"];
  dst [width=3.5, label="Destination"];
  filter [label="Filter"];

  edge[constraint=false];
  src -> dst [label="Encoding\nprocess"];
  src -> filter [label="a"];
  filter -> dst [label="b"];
  dst -> filter [label="c"];
  filter -> src [label="d"];
  dst -> src [label="Decoding\nprocess"];

  edge[style=invis, constraint=true];
  src->filter->dst;

}
Run Code Online (Sandbox Code Playgroud)

将图表另存为edp.gv并使用创建图像

dot -Gsplines=none edp.gv | neato -n -Gsplines=ortho -Tpng -o edp.png
Run Code Online (Sandbox Code Playgroud)

结果:

最接近的graphviz输出

一些评论:

  • 我最终穿上constraint=false了所有边缘,并添加了不可见的边缘以使三个节点居中
  • 通常我喜欢使用dir=back,但在渲染时我无法使用它-Gsplines=ortho
  • 如您所见,边缘的顺序是随机的......