layoutgraphvizgraph-drawing

Graphviz: How to render a graph respecting certain node-edge connection points?


I want to render a graph in similar layout to the following one:

wanted

I tried this:

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"];

}

which generated the following result :( Not very nice...

my

Can anyone show me the closest possible solution? (Probably it is not possible make exactly the same)


Solution

  • As close as I got before calling it a night:

    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;
    
    }
    

    Save the graph as edp.gv and create the image with

    dot -Gsplines=none edp.gv | neato -n -Gsplines=ortho -Tpng -o edp.png
    

    Result:

    closest possible graphviz output

    Some remarks: