graphviz – Wie lassen sich Graphen zeichnen

Graphviz Graph

Zur Darstellung von Zusammenhängen, Prozessen und Abläufen können Graphen dienen. Die oft komplexeren Zusammenhänge lassen sich jedoch nur schwer abbilden. graphviz ist ein Tool, das einem die Erstellung von Graphen erleichtert. Es basiert dabei immer auf einer Beschreibungsdatei, die dann den Graphen generiert. Dadurch braucht man keine Kenntnisse über irgendwelche Grafikwerkzeuge und hat noch direkt eine Format, das sich für die Versionsverwaltung besser eignet als ein binär kodiertes Bild.

Um das Tool unter beispielsweise Debian zu installieren, gebt ihr folgenden Befehl ein. Dadurch wird im aktuellen Debian 9 die Version 2.38 von graphviz installiert. Die Installation richtet 7 Tools ein, die die Syntax von graphviz unterstützen (dot, neato, twopi, circo, fdp, sfdp, patchwork). Auch für Windows steht graphviz zur Verfügung, sowie für alle möglichen anderen Linux-Distributionen.

sudo apt install graphviz

Um dann beispielsweise mit dot das Titelbild dieses Blog-Beitrags zu erstellen, genügt ein Textfile mit dem folgenden Inhalt:

digraph{
    Idee -> Schreiben -> Korrigieren
    Korrigieren -> Veröffentlichen -> Idee
}

Dies kann dann mit folgendem Befehl beispielsweise in das PNG-Format konvertiert werden. Dadurch wird eine Datei mit dem Namen filename.gv.png erstellt. Es lassen sich aber auch SVG, JPEG, PDF und vieles mehr generieren. Ihr müsst dazu nur hinter -T das gewünschte Format angeben.

dot filename.gv -Tpng -O

Wenn ihr das gleiche Textfile beispielsweise mit dem Program circo verarbeitet, dann wird daraus eher eine runde anstatt eine längliche Grafik. Die Anwendungsfälle der einzelnen Werkzeuge ist jedoch auch gut in der Dokumentation beschrieben. Zur Vereinfachung werde ich in diesem Beitrag nur auf dot eingehen, obwohl die Syntax für alle Werkzeuge die gleiche ist.

Graph

Möchte man seine Grafik etwas anders als der Standard, bietet graphviz hierfür die entsprechenden Möglichkeiten. Möchte man, dass der Graph nicht von oben nach unten sondern von links nach rechts gezeichnet wird, kann mit rankdir die gewünschte Zeichenrichtung angegeben werden. Zur Auswahl stehen LR (von links nach rechts), TB (von oben nach unten) und jeweils andersherum, wenn man die Buchstaben vertauscht (RL und BT). Es lassen sich auch die Formen der Knoten auswählen und die Art der Linien verändern. So lassen sich mit shape die Form auf box oder diamond und noch vieles mehr setzen oder die Linie mit style auf gestrichelt (dotted). Als Beispiel kann der Graph dann wie folgt aussehen.

digraph{
    rankdir="LR"
    A [shape="box"]
    B [shape="diamond"]

    A -> B
    C -> B [style="dotted"]
}

Es lassen sich die einzelnen Knoten auch einfärben, indem man das Attribute color hinzufügt. Dadurch wird der Rahmen des Knoten farbig. Möchte man den ganzen Knoten ausgefüllt haben, dann muss man den style noch auf filled setzen und man erhält das gewünschte Ergebnis.

Graph

digraph{
    rankdir="LR"
    A [shape="box", color="red"]
    B [shape="diamond", style="filled", color="orange"]
    C [style="filled", color="green"]

    A -> B
    C -> B [style="dotted"]
}

Die Möglichkeiten sind sehr vielfältig und ich entdecke jeden Tag aufs neue mehr Möglichkeiten. Mir hilft das Werkzeug im Alltag ungemein. Es lassen sich komplexe Zusammenhänge innerhalb kurzer Zeit veranschaulichen und das Ergebnis ist am Schluss nicht auf einem Fresszettel auf dem Schreibtisch, sondern in einer vorzeigbaren Form. Dadurch können Prozesse und Zusammenhänge besser mit Vorgesetzen und Kollegen kommuniziert werden und Entscheidungen gefällt werden. Ich hoffe ich konnte euch helfen und wie immer gilt, wenn ihr Fragen oder Anregungen habt, dann kontaktiert mich einfach.


Geschrieben von Christian Decker am 11.09.2018