Björn Klippstein

Graphviz-Attribute

Klippstein IT Service

Aus 4webmaster.de

Wechseln zu: Navigation, Suche

Grafische Eigenschaften

Farben und Fonts anpassen

Diagramme sollen nicht nur übersichtlich sein, sie sollen meist auch angenehm anzuschauen sein. Ihr Erscheinungsbild lässt sich so anpassen, dass es sich in die Site integriert. Dazu dienen die ersten drei Zeilen in untenstehendem Diagramm-Quellcode (der Rest ist unverändert).


digraph G {
 node [fontname=Verdana,fontsize=12]
 node [style=filled]
 node [fillcolor="#EEEEEE"]
 node [color="#EEEEEE"]
 edge [color="#31CEF0"]
 
 main -> parse -> execute
 main -> init
 main -> cleanup
 execute -> make_string
 execute -> printf
 init -> make_string
 main -> printf
 execute -> compare
}
Graphviz-Beispiel Farben und Fonts anpassen
Angepasste Farben und Fonts


Mit node und edge wird die Default-Darstellung von Nodes und Edges festgelegt. Im obigen Beispiel werden fünf Attribute von node neu gesetzt sowie ein Attribut von edge. Ein Attribut setzt man durch ein Schlüssel-Wert-Paar, z.B. fontname=Verdana. Diese Attribut-Zuweisung wird in eckige Klammern eingeschlossen und hinter das Element notiert, für das es gelten soll. Mehrere Attribut-Zuweisungen in einer Zeile sind auch möglich, sie werden mit Komma getrennt.

Die Attribute von node gelten für alle Nodes des Diagrammes. Und zwar ab dem Moment, wo sie festgelegt werden: Wenn z.B. die Farbe von Nodes ganz oben im DOT-Quelltext festgelegt wird werden alle anschließend erstellten Nodes in dieser Farbe dargestellt. Wenn die Farbe erst in der Mitte des Quelltextes festgelegt wird, ist nur der untere Teil des Graphen mit der Farbe dargestellt.

Genauso verhält es sich mit den Attributen von edge. Auch für den Graphen selbst (graph) können Attribute gesetzt werden. Eine vollständige Liste aller Attribute findet sich in [1]

Die Richtung des Diagrammes festlegen

Ein Attribut von graph ist seine Orientierung: Soll er von oben nach unten (Default-Einstellung) oder von links nach rechts dargestellt werden? Dazu dient das Attribut rankdir, es legt die Orientierung des Graphen fest. Erlaubt sind die Werte TB (Default), LR (untenstehendes Beispiel), BT (von unten nach oben) oder RL (von rechts nach links).


digraph G {
 graph [rankdir=LR] 
 
 main -> parse -> execute
 main -> init
 main -> cleanup
 execute -> make_string
 execute -> printf
 init -> make_string
 main -> printf
 execute -> compare
}
rankdir-Attribut (Graphviz)
rankdir=LR


Die Zeilen zur Anpassung der Farben und Fonts werden in den Quelltextbeispielen jetzt weggelassen, obwohl sie in den zugehörigen Diagrammen natürlich nach wie vor vorhanden sind.

Das Aussehen einzelner Elemente ändern

Attribute können auch gezielt für einzelne Elemente gesetzt werden. Dazu werden sie direkt hinter dem Element notiert.

Das folgende Beispiel ist direkt im Quellcode kommentiert.


digraph G {
/* Node main initialisieren und */
/* Attribute für ihn setzen     */ 
 main [shape=box, color=deeppink]
 
 main -> parse -> execute
 
/* Node init initialisieren,       */
/* Edge von main nach init und     */
/* Attribute für diese Edge setzen.*/
 main -> init [color=deeppink, 
               arrowhead=vee, 
               arrowtail=vee]
 
/* Attribute für den Node init    */
/* setzen. Das geht auch, nachdem */
/* er schon initialisiert ist.    */
 init [shape=box, color=deeppink]
 
 main -> cleanup
 execute -> make_string
 execute -> printf
 init -> make_string
 main -> printf
 
/* Bei Edges kann man die        */
/* Attribute nicht im nachhinein */
/* setzen. Dabei wird nämlich    */
/* eine zweite Edge erzeugt.     */
 execute -> compare
 execute -> compare [color=green, 
                     arrowtail=tee]
}
Beispieldiagramm Graphviz-Attribute
Elemente einzeln formatieren


Die Darstellung von Nodes verändern

Die folgende Grafik, die einer MindMap ähnelt, zeigt eine Übersicht über Attribute, die das Aussehen eines einzelnen Nodes ändern. Die blauen Linien haben hier die Bedeutung "ist Attribut von".

  • Farbe: Die Farben werden mit color und fillcolor bestimmt. Erlaubt sind z.B. Farbnamen ("red"), hexadezimale Farbangaben ("#EEEEEE") oder Farbnummern (7). Die Farbnummern beziehen sich auf eine vorher mit colorsheme gesetzte Farbpalette . Wenn z.B. colorsheme=spectral7, dann bezeichnet fillcolor=7 die Farbe mit der Nummer 7 in dieser Palette (ein gedämpftes blau). Die Farbnamen und eine umfangreiche Bibliothek von Farbpaletten für verschiedene Zwecke finden sich unter [2]. Die Angabe von fillcolor funktioniert leider nur mit der zusätzlichen Angabe von style=filled.
  • Größe: Die Größe eines Node wird normalerweise automatisch bestimmt, je nach dem wieviel Text er enthält. Mit height und width lassen sich aber auch Mindesthöhe und Mindestbreite angeben. Wählt man aber fixedsize=true für den Node, ändern die Parameter ihre Bedeutung, jetzt legt man damit die Höhe und Breite direkt fest.
  • Form: Außer der standardmäßigen Ellipse können Nodes vielfältige Formen annehmen. Bei shape=plaintext wird gar keine Form um den Node herum gezeichnet. Außerdem gibt es noch shape=record, damit erzeugt man die verschachtelten Nodes, die auch in untenstehendem Diagramm verwendet werden. Dazu später mehr. Wählt man shape=polygon (Vieleck), dann kann man die Form des entstehenden Polygons mit weiteren Node-Attributen (sides, regular, distortion und skew) spezifizieren. Das Attribut orientation dreht die Form des Node um den angegebenen Winkel (0°..360°). Alle Möglichkeiten von shape finden sich unter [3].
  • Rahmenlinie: Mit dem style - Attribut läßt sich das Aussehen eines Nodes weiter spezifizieren. Z.B. die Art der Rahmenlinie: durchgezogen, mit abgerundeten Ecken, gepunktet, gestrichelt oder fett. (Mit dem Node-Attribut peripheries=2 kann man übrigens den Node auch mit einer doppelten Rahmenline umgeben.)
    style=invis macht ein Node komplett unsichtbar. Damit kann man z.B. die Plazierung der anderen Nodes beeinflussen.
Übersicht: Node-Attribute von Graphviz


Die Darstellung von Edges verändern

Auch die Darstellung von Edges lässt sich vielfältig verändern. Am Ende des Abschnittes finden Sie wieder eine zusammenfassende MindMap.

  • Linie: Die Art der Linie, mit der eine Edge gezeichnet wird, lässt sich mit dem style - Attribut bestimmen. Wie Rahmenlinien von Nodes können Edges durchgezogen, fett, gestrichelt, gepunktet oder unsichtbar sein.
  • Farbe: Für die Farbe der Edge verwendet man das color - Attribut ebenso wie bei Nodes.
  • Pfeilspitzen: Statt der standardmäßigen Pfeilspitzen können die Enden der Edges mit vielfältigen Symbolen gezeichnet werden. Den Punkt 'dot' haben Sie ja schon kennengelernt. Alle Möglichkeiten finden Sie hier [4]. Das Attribut arrowhead legt das Ziel der Edge fest, arrowtail die Quelle. Mit arrowsize können Sie die Pfeilspitzen vergrößern oder verkleinern. arrowsize=0.5 sorgt beispielsweise für halb so große Pfeilspitzen. Beide Enden können leider nur gemeinsam skaliert werden.
  • Verbindung zum Node: Mit headclip=false und tailclip=false können Sie bewirken, dass eine Edge nicht nur bis zum Außenrand eines Nodes gezeichnet wird. Stattdessen wird die Linie des Edge bis in die Mitte des Node geführt. Im obigen Diagramm der Node-Attribute wurde das z.B. eingesetzt, um die Abhängigkeit von fillcolor und style=filled zu visualisieren. Die Attribute dieser Edge lauten:
    [color=gold1, arrowhead=none, arrowtail=none, headclip=false, tailclip=false]
    Nützlich ist das auch für unsichtbare Nodes (style=invis). Es gibt allerdings elegantere Möglichkeiten, das Aussehen des Diagrammes zu beeinflussen, als der Einsatz unsichtbarer Nodes.
  • Verbindungspunkte zusammenfassen: Normalerweise wird für jede neue Edge ein neuer Verbindungspunkt am Rand des Edge gezeichnet. Wenn Sie mehrere Verbindungspunkte zusammenfassen wollen, weisen Sie ihnen das gleiche sametail - Attribut zu, z.B. Beispiel sametail=gruppe1. Analog funktioniert das auch mit dem Zielpunkt der Edges (samehead).
Übersicht: Edge-Attribute von Graphviz




Dieser Artikel ist ein Originalartikel von 4webmaster.de. Copyright: Björn Klippstein; CC-Lizensierung in Kürze