Wie verhindere ich, dass einige Knoten und Kanten gezeichnet werden?

4714
badp

Ich habe eine sehr einfache Grafik:

digraph G { "for" -> "initial assignment" "initial assignment" -> "condition" "condition" -> "code" [color=red] "condition" -> "end" [color=red] "code" -> "final assignment" [color=red] "final assignment" -> "condition" [color=red] } 

Siehe Ausgabe

Die Knoten müssen jedoch in einer bestimmten Reihenfolge von oben nach unten gezeichnet werden. (Die roten Pfeile wären rot, weil sie sich dieser Reihenfolge widersetzen.)

Eine Möglichkeit, dies zu tun, ist:

digraph G {         "$1" -> "$2" -> "$3" -> "$4" -> "$5" -> "$6"   "for" -> "initial assignment" "initial assignment" -> "condition" "condition" -> "code" [color=red] "condition" -> "end" [color=red] "code" -> "final assignment" [color=red] "final assignment" -> "condition" [color=red]  } 

Siehe Ausgabe

Dies zeigt jedoch diese zusätzlichen Knoten in der Grafik an, und ich hätte das lieber nicht. Wie kann ich Knoten und Kanten definieren, ohne sie gezeichnet zu haben?

(Ich könnte die Kanten als weiß definieren, den Knotentext als weiß usw.), aber Graphviz würde immer noch Platz für sie zuweisen, und dies würde bei transparenten PNG-Bildern nicht funktionieren. Außerdem funktionieren Layer nicht für alle Ausgabeformate B. .png, und der für diese Knoten erforderliche Speicherplatz wird noch zugewiesen. Lassen Sie uns diese Lösungen nicht in Betracht ziehen.)

3

2 Antworten auf die Frage

3
cYrus

Why not using the nodes themselves for suggesting a specific ordering?

digraph G { { edge[style=invis] a[label="for"] b[label="initial assignment"] c[label="condition"] d[label="final assignment"] e[label="code"] f[label="end"] a -> b -> c -> d -> e -> f } a -> b -> c c -> e [color=red] c -> f [color=red] e -> d -> c [color=red] } 
Dies macht den Trick in diesem einfachen Fall. :) badp vor 12 Jahren 0
1
badp

Stephen North, Autor von Graphviz, schlägt vor, Folgendes zu verwenden [style=invis]:

digraph G {  { node [style=invis] edge [style=invis] "$1" -> "$2" -> "$3" -> "$4" -> "$5" -> "$6"  }    ................................................................................ 

Ausgabe

Das Problem kann dadurch nicht vollständig gelöst werden, da für diese Teile immer noch Platz reserviert wird, aber ich denke, es ist so gut wie es nur geht.