GraphViz: Wie rendere ich ein Diagramm, das bestimmte Verbindungspunkte für die Knotenkante respektiert?
-
25-10-2019 - |
Frage
Ich möchte ein Diagramm in ähnlichem Layout wie folgt rendern:
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 ...
Kann mir jemand die nächstgelegene Lösung zeigen? (Wahrscheinlich ist es nicht möglich, genau gleich zu machen)
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:
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