GraphViz: Wie rendere ich ein Diagramm, das bestimmte Verbindungspunkte für die Knotenkante respektiert?

StackOverflow https://stackoverflow.com/questions/8318253

  •  25-10-2019
  •  | 
  •  

Frage

Ich möchte ein Diagramm in ähnlichem Layout wie folgt rendern:

wanted

Ich habe das versucht:

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

}

Was das folgende Ergebnis erzeugte :( nicht sehr nett ...

my

Kann mir jemand die nächstgelegene Lösung zeigen? (Wahrscheinlich ist es nicht möglich, genau gleich zu machen)

War es hilfreich?

Lösung

So nah wie ich hatte, bevor ich es eine Nacht nannte:

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;

}

Speichern Sie die Grafik als edp.gv und erstellen das Bild mit

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

Ergebnis:

closest possible graphviz output

Einige Bemerkungen:

  • Am Ende habe ich gesetzt constraint=false An allen Kanten und fügen Sie unsichtbare Kanten hinzu, um die drei Knoten zentriert zu haben
  • Normalerweise benutze ich gerne dir=back, aber ich konnte dies nicht benutzen, wenn ich mich mit dem Rendern -Gsplines=ortho
  • Wie Sie sehen können, ist die Reihenfolge der Kanten zufällig ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top