Skip to end of metadata
Go to start of metadata

Graphviz - Graph Visualization Software

Graphviz ist eine Software zur Visualisierung von Objekten und deren Beziehungen untereinander. Mit Graphviz lassen sich Struktur-Grafiken (Diagramme, Mind Maps usw.) erstellen. Das mögliche Spektrum reicht von der Abbildung einfacher Strukturen bis hin zur Illustration komplexer Zusammenhänge - daher ist Graphviz in vielen Anwendungsbereichen nützlich.

Im Gegensatz zu WYSIWYG-Grafikprogrammen zeichnet der Anwender die Graphen nicht selbst, sondern Graphviz erzeugt die Graphen aus Text. Das heisst, der Anwender muss eine Anweisung in Textform erstellen, welche die Beschreibung der einzelnen Elemente des Graphen (Knoten und Kanten) enthält. Zusätzlich können Layout, Form- und Farbgebung bestimmt werden. Graphviz erzeugt aus dieser Anweisung dann automatisch eine Grafik. Durch dieses Prinzip sind im Gegensatz zu Standard-Grafikprogrammen Veränderungen an den Grafiken schnell möglich.

Im Confluence-Wiki sind auf Basis von Graphviz verschiedene Macros nutzbar. Für das "Flowchart Macro" folgt eine kurze Beschreibung der wichtigsten Grundlagen. Für weitere Informationen konsultieren Sie bitte nachfolgende Quellen.

Homepage: www.graphviz.org (engl.), hier insbesondere:

Dokumentation zum Graphviz-Plugin für Confluence

Anleitungen:
Graphviz-Tutorial von 4webmaster.de, Autor: Björn Klippstein
WikiSchool: Graphviz
ZUM-Wiki: Hilfe:Graphviz

Flowchart Macro

Mit dem Flowchart Macro können Diagramme erzeugt werden. Die Beschreibung der einzelnen Elemente erfolgt mit der Graphviz-Language.
Da es für die Anwendung von Graphviz keinen grafischen Editor gibt, kann die Eingabe nur im "Wiki-Markup-Modus" vorgenommen werden.

grundsätzliche Arbeitsschritte:

  1. Editiermodus aufrufen mit "Bearbeiten"
  2. "Wiki-Markup" auswählen
  3. zweimal {flowchart} eingeben
  4. Eingabe der Beschreibung der Grafik zwischen {flowchart} und {flowchart}

Übersicht

1. Grundstruktur
2. Ausrichten des Diagramms
3. Anpassen der Farbe
4. Anpassen der Form
5. Beschriften der Elemente

1. Grundstruktur

Es gibt zwei Elementtypen: Knoten (nodes) und Verbindungslinien (edges).
Die Verbindungslinie zwischen zwei Knoten wird mit ->erzeugt.

{flowchart}
  Knoten1 -> Knoten2
{flowchart}
{flowchart}
  Knoten1 -> Knoten2
  Knoten2 -> Knoten6
  Knoten1 -> Knoten3
  Knoten1 -> Knoten4
  Knoten3 -> Knoten7
  Knoten7 -> Knoten6
  Knoten7 -> Knoten8
  Knoten7 -> Knoten5
  Knoten1 -> Knoten5
{flowchart}


Für die Beschreibung der einzelnen Elemente gibt es eine Vielzahl von Möglichkeiten. Wichtige Attribute werden im folgenden vorgestellt. An dieser Stelle wird nur kurz auf die Positionierung der Attribute im Code eingegangen:

Globale Angaben

Für die Knoten und Linien können global Festlegungen getroffen werden durch die Attributierung von "node" und "egde".

{flowchart}
  node [Attribut1=Attributwert, Attribut2=Attributwert]
  edge [Attribut1=Attributwert, Attribut2=Attributwert]
{flowchart}
Angaben zu einzelnen Knoten

Knoten, die nicht die globalen Merkmale haben sollen, müssen einzeln definiert werden.

{flowchart}
  Name des Knotens [Attribut1=Attributwert, Attribut2=Attributwert]
  Name des Knotens [Attribut1=Attributwert, Attribut2=Attributwert, Attribut3=Attributwert]
  ...
{flowchart}
Angaben zu einzelnen Linien

Verbindungslinien, die nicht die globalen Merkmale haben sollen, müssen einzeln definiert werden. Dies erfolgt hinter der Kombination "Knoten -> Knoten". Oder hinter "Knoten -> Knoten -> Knoten" usw. - dann gilt die Definition für alle Verbindungslinien in der Reihe.

{flowchart}
  Name des Knotens -> Name des Knotens [Attribut1=Attributwert, Attribut2=Attributwert]
  Name des Knotens -> Name des Knotens -> Name des Knotens [Attribut1=Attributwert]
{flowchart}

Beispiel

                   
         

{flowchart}
  node [shape=ellipse, style=filled, fillcolor=azure]
  edge [color=blue]
  B [shape=diamond]
  C [shape=diamond, fillcolor=red, fontcolor=white]
  A -> B -> D
  A -> C [color=red]
  C -> D [color=red, style=dashed]
{flowchart}


zurück zur Übersicht

2. Ausrichten des Diagramms

Die Ausrichtung einer Grafik lässt sich mit dem Attribut rankdir bestimmen. Es bestehen vier Möglichkeiten:

von oben nach unten: "rankdir=TB"

von unten nach oben: "rankdir=BT"

von links nach rechts: "rankdir=LR"

von rechts nach links: "rankdir=RL"

             

             




    




    

{flowchart}
  rankdir=TB
  A -> B
{flowchart}
{flowchart}
  rankdir=BT
  A -> B
{flowchart}
{flowchart}
  rankdir=LR
  A -> B
{flowchart}
{flowchart}
  rankdir=RL
  A -> B
{flowchart}

zurück zur Übersicht

3. Anpassen der Farbe

Die Farben der Knoten und Verbindungslinien lassen sich vielfältig bestimmen. Eine Übersicht zu möglichen Farben findet sich hier.
Die wichtigsten Attribute zur Farbgestaltung sind folgende:

Attribut

Erläuterung

bgcolor

Hintergrundfarbe für die gesamte Grafik

color

Linienfarbe (für Knotenrahmen und Verbindungslinien)

fillcolor

Füllfarbe für den Knoten

fontcolor

Schriftfarbe (Knoten)

Beachte: Bei Verwendung des Attributs fillcolor muss zusätzlich style=filled angegeben werden.

Beispiel

{flowchart}
  rankdir=LR
  bgcolor=PaleTurquoise
  midnightblue [style=filled, color=red, fillcolor=midnightblue, fontcolor=white]
  beige [style=filled, color=beige, fillcolor=lightcoral]
  yellow [style=filled, color=green, fillcolor=yellow]
  red [style=filled, color=gray, fillcolor=red]
  lawngreen [style=filled, color=green, fillcolor=lawngreen, fontcolor=brown]
  moccasin [color=moccasin, fontcolor=red]
  midnightblue -> beige -> yellow -> red -> lawngreen -> moccasin [color=blue, label="blau", fontcolor=blue]
  Standard -> beige -> red [color=red, label="rot", fontcolor=red]
{flowchart}


zurück zur Übersicht

4. Anpassen der Form

Es gibt verschiedene Möglichkeiten, die Form der einzelnen Elemente zu verändern.

Form der Knoten - Festlegung mit dem Attribut shape

Mögliche Formen: shape=

Beispiel

{flowchart}
  rankdir=LR
  Dreieck [shape=triangle, style=filled, color=red, fillcolor=midnightblue, fontcolor=white]
  Ei [shape=egg, style=filled, color=beige, fillcolor=lightcoral]
  "Kasten 3d" [shape=box3d, style=filled, color=green, fillcolor=yellow]
  Haus [shape=house, style=filled, color=gray, fillcolor=red]
  Kreis [shape=circle, style=filled, color=green, fillcolor=lawngreen, fontcolor=brown]
  Vieleck [shape=polygon, sides=6, color=moccasin, fontcolor=red]
  Dreieck -> Ei -> "Kasten 3d" -> Haus -> Kreis -> Vieleck
  Standard -> Ei -> Haus
{flowchart}

Bei Wahl des Attributs shape=polygon können weitere Attribute zur Gestaltung genutzt werden. Hier die wichtigsten:

Attribut

Erläuterung

Beispiel

Code

sides

Anzahl der Seiten

{flowchart}
  Vieleck [shape=polygon, sides=5]
{flowchart}

regular

regelmäßiges Vieleck,
wenn "regular=true"

{flowchart}
  Vieleck [shape=polygon, sides=5, regular=true]
{flowchart}
Kombinierte Knoten

Einzelne Knoten können mit shape=record bzw. shape=Mrecord (identisch, aber runde Ecken)
zu einem Knoten kombiniert werden:

Beispiel

Code

shape=record
{flowchart}
  node [shape=record]
  struct1 [label="<f0> left|<f1> middle|<f2> right"]
  struct2 [label="<f0> one|<f1> two"]
  struct3 [label="hello\nworld |
                  { b |{c|<here> d|e}| f}| g | h"]
  struct1:f1 -> struct2:f0
  struct1:f2 -> struct3:here
{flowchart}
shape=Mrecord
{flowchart}
  node [shape=Mrecord]
  struct1 [label="<f0> left|<f1> middle|<f2> right"]  
{flowchart}

Gestalten der Linien

Mit dem Attribut style lässt sich das Aussehen der Rahmen- und Verbindungslinien variieren.
Folgende Möglichkeiten können angewandt werden:

Attributwert

Erläuterung

Beispiel

Code

solid

Linie: durchgezogen

{flowchart}
  rankdir=LR
  solid [style=solid]
  Standard -> solid [style=solid]
{flowchart}

bold

Linie: fett

{flowchart}
  rankdir=LR
  bold [style=bold]
  Standard -> bold [style=bold]
{flowchart}

dashed

Linie: gestrichelt

{flowchart}
  rankdir=LR
  dashed [style=dashed]
  Standard -> dashed
  [style=dashed]
{flowchart}

dotted

Linie: gepunktet

{flowchart}
  rankdir=LR
  dotted [style=dotted]
  Standard -> dotted [style=dotted]
{flowchart}

invis

Linie: unsichtbar

{flowchart}
  rankdir=LR
  invis [style=invis]
  Standard -> invis [style=invis]
{flowchart}

Anm.: Mit unsichbaren Knoten kann die Platzierung anderer Knoten beeinflusst werden.

filled

Knoten mit Füllfarbe

{flowchart}
  filled [style=filled, fillcolor=azure]
{flowchart}

rounded

Knoten mit abgerundeten Ecken

{flowchart}
  rounded [style=rounded]
{flowchart}

diagonals

Knoten mit eingezeichneten Diagonalen

{flowchart}
  diagonals [style=diagonals]
{flowchart}

Über den Einsatz des Attributs peripheries lässt sich die Anzahl der Rahmenlinien um einen Knoten steuern.

{flowchart}
  peripheries [shape=circle, peripheries=3]
{flowchart}

Gestalten der Pfeile

Es bestehen diverse Varianten die Standard-Pfeile abzuwandeln.

Mögliche Formen

Attribute

Erläuterung

arrowhead

Ziel der Linie

arrowtail

Quelle der Linie

arrowsize

Größe der Pfeilspitzen (beide Enden)


Beispiel

{flowchart}
  rankdir=LR
  A -> B [arrowtail=dot, arrowhead=open, arrowsize=0.5]
{flowchart}


zurück zur Übersicht

5. Beschriftung

Beschriftung der Knoten

Standard

Verwendung von Anführungszeichen

Beschriftung über Label

Standardmäßig wird der Name des Knotens als Beschriftung verwendet.

Wenn Leerzeichen, Sonderzeichen oder Zeilenumbrüche enthalten sind muss der Name in Anführungszeichen gesetzt werden.
Soll ein Anführungszeichen als Text und nicht zur Steuerung benutzt werden, verwende: \"

Über den Einsatz von label= kann die Beschriftung unabhängig vom Namen des Knotens gesteuert werden. Die Beschriftung muss dabei nur einmal definiert werden, für den Namen des Knotens kann dann eine handliche Kurzform genommen werden.

 

falsch:

richtig:

 

{flowchart}
  rankdir=LR
  A -> B
{flowchart}
{flowchart}
  rankdir=LR
  A 1 -> A 2
{flowchart}
{flowchart}
  rankdir=LR
  "A 1" -> "A 2"
{flowchart}
{flowchart}
  rankdir=LR
  A [label="A 1"]
  B [label="A 2"]
  A -> B
{flowchart}

Beschriftung der Verbindungslinien

Beschriftung in der Mitte mit label=

Beschriftung an der Pfeilspitze mit headlabel=

Beschriftung am Ursprung mit taillabel=

{flowchart}
  rankdir=LR
  ranksep=2
  A -> B [label="label"]
{flowchart}
{flowchart}
  rankdir=LR
  ranksep=2
  A -> B [headlabel="headlabel"]
{flowchart}
{flowchart}
  rankdir=LR
  ranksep=2
  A -> B [taillabel="taillabel"]
{flowchart}

zurück zur Übersicht