AA_lines_mn-que_sxc_733634.jpg

© Mn-que, sxc.hu

Richtig ausgerichtet

Mit Graphviz komplexe Strukturen veranschaulichen

18.06.2014
Netzwerkpläne, verschachtelte Abhängigkeiten oder binäre Bäume – mit Graphviz visualisieren Sie auf einfache Weise komplexe Zusammenhänge.

Graphviz-Serie

Michael Niedermair: "Richtig arrangiert" LU 01/2014, S. 46 http://www.linux-community.de/28542
Michael Niedermair: "Dot2tex" LU 06/2014, S. XXX http://www.linux-community.de/28543

In der Open-Source-Landschaft ist das Programm Graphviz [1] seit Längerem fest verankert (siehe Kasten "Aus den Bell Labs"). Vielfach leistet es unbemerkt im Hintergrund seine Dienste, etwa beim automatischen Erstellen von Abbildungen auf einem Webserver über ein Skript aus einer Datenbank heraus.

Aus den Bell Labs

Die plattformübergreifende Visualisierungssoftware Graphviz stammt ursprünglich von AT&T und den Bell Labs. Die Software existiert seit 1988, steht unter der Eclipse Public License (EPL) [2] und läuft unter den Betriebssystemen Linux, Solaris, Windows und Mac OS X. Für alle Distributionen stehen stabile Pakete bereit.

Die Markdown-Sprache Asciidoc [3] bietet die Möglichkeit, Graphviz-Daten direkt einzubetten – der Compiler übersetzt diese Abschnitte automatisch in entsprechende Grafiken. Für Doxygen [4] und diverse Wiki-Plattformen stehen passende Plugins bereit. Ebenso kommt Graphviz in Puppet [5] zum Einsatz – hier zum Erzeugen von Ressourcen-Graphen.

Beim Verarbeiten gerichteter und ungerichteter Graphen (siehe Kasten "Graphen-Typen") helfen die Kommandozeilenwerkzeuge dot, neato, fdp, circo und twopi. Sie alle gehören zum Graphviz-Paket und setzen jeweils spezifische Algorithmen aus der Graphentheorie zur Reduktion von Kantenlängen, Separierung von Teilgraphen und Erkennen von Zusammenhangskomponenten [6] um.

Graphen-Typen

Ein Graph besteht aus einer Menge von Knoten und Kanten, wobei eine Kante stets zwei Knoten miteinander verbindet. Es gibt zwei Typen von Graphen: ungerichtet und gerichtet. Bei einem ungerichteten Graphen weisen die Kanten keine Angabe zur Richtung auf. Bei gerichteten Graphen dagegen verfügen alle Kanten über eine solche. Diese gibt die Leserichtung vor, ähnlich einer Einbahnstraße.

Arbeitsablauf

Zunächst erzeugen Sie mit einem Texteditor eine Beschreibung der Elemente und deren Abhängigkeiten untereinander und speichern diese als Textdatei ab. Im nächsten Schritt steht das Übersetzen der Datei mit einem der genannten Tools in ein Ausgabeformat an (GIF, PNG, SVG, PDF, Postscript). Der folgende Befehl erzeugt aus graph.dot eine Abbildung im PNG-Format:

$ dot -Tpng graph.dot -o graph.png

Der Aufbau der Dot-Datei gestaltet sich recht einfach: Zunächst definieren Sie einen Graphen (Listing 1, Zeile 1). Mit dem Schlüsselwort digraph beginnt ein gerichteter Graph, auf Englisch abgekürzt für "directed graph". Vergessen Sie keinesfalls die öffnende, geschweifte Klammer nach dem Schlüsselwort.

In den darauffolgenden Zeilen spezifizieren Sie die drei Knoten A, B und C mit entsprechenden Attributen zum Gestalten der Knoten und Kanten. Jede Zeile schließen Sie am Ende mit einem Semikolon ab. Als Name eines Knotens verwenden Sie entweder einen Bezeichner, wie er in der Programmiersprache C zulässig ist, oder eine Zahl beziehungsweise eine in Anführungszeichen eingeschlossene Zeichenkette. Leer-, Steuer- und sonstige Satzzeichen respektiert Dot ebenfalls. Mehrzeilige Beschriftungen erzeugen Sie mittels \n für einen Zeilenumbruch. Die Beschriftung erscheint dann mittig.

Der Operator -> erzeugt eine Kante zwischen zwei Punkten in der entsprechenden Richtung. In Zeile 6 schließen Sie die Definition des Graphen mit einer geschweiften Klammer ab. Mit der Vergabe von Attributen steuern Sie das Aussehen des Graphen. Die Attribute geben Sie in eckigen Klammern an. Das ist entweder als allgemeine Anweisung für alle nachfolgenden Elemente möglich oder nur explizit für einzelne Knoten. Letzteres zeigen die Zeilen 2 und 3 in Listing 1.

Listing 1

digraph G {
A -> B [style=dotted];
A -> C [color=red, label="Beschriftung"];
C [shape=box, style=filled, color="0.7 0.7 0.0"];
B -> C;
}

Des Weiteren definiert Zeile 2 eine gepunktete Linie, Zeile 3 stattdessen eine rot gefärbte Linie mit einer Beschriftung der Kante. Dazu verwenden Sie das Attribut label, gefolgt von einem Gleichheitszeichen und dem Inhalt in Anführungszeichen. In Zeile 4 legen Sie für den Knoten C einen eckigen Rahmen fest, dessen Inhalt eine blaue Farbe erhält. Den genauen Farbwert setzen Sie aus den Rot-, Grün- und Blau-Anteilen zusammen. Abbildung 1 zeigt den Quellcode und das Ergebnis im Bildbetrachter.

Abbildung 1: Farbige Visualisierung eines gerichteten Graphen mit drei Knoten.

In der praktischen Arbeit mit dem Rechner eignet sich Graphviz unter anderem dazu, Verzeichnishierarchien zu visualisieren. Ein ungerichteter Graph zeigt in einer Baumstruktur, wo sich möglicherweise unerwünscht Ordner angesammelt haben. Das Programm bietet mit der Option folder für die Ausgabe der Knoten kleine Symbole an, deren Aussehen sich an jenes von Ordnern im Dateimanager anlehnt (Listing 2).

Listing 2

graph {
"/" [shape=folder];
"/boot" [shape=folder];
"/usr" [shape=folder];
"/home" [shape=folder];
"/var" [shape=folder];
"/frank" [shape=folder];
"/peter" [shape=folder];
"/" -- "/boot";
"/" -- "/usr";
"/" -- "/home";
"/" -- "/var";
"/home" -- "/frank";
"/home" -- "/peter";
}

Diese Datei übersetzen Sie analog zum vorher gezeigten Beispiel. Abbildung 2 präsentiert die erzeugte Grafik. Nutzen Sie eines der anderen Werkzeuge, übersetzen diese obige Beschreibung zwar anstandslos, ordnen die Objekte aber kreisförmig an, was der gewohnten Sicht auf ein Dateisystem entgegensteht.

Abbildung 2: Graphviz bringt von Haus aus eine kleine Grafik mit, die sich dazu eignet, um Ordner in einer Verzeichnishierarchie zu symbolisieren.

Mit etwas Geschick ließe sich die Dot-Datei aus einem Skript heraus erzeugen. Auf diese Weise würden Sie sich automatisiert einen Überblick über einen Zweig des Dateisystems verschaffen.

Binärer Baum

Bäume bestehen als Datenstrukturen aus Knoten und Kanten, wobei die Wurzel den oberste Knoten bildet. Binäre Bäume verfügen über zwei Sorten von Knoten – äußere (ohne Nachfolger) und innere (mit genau zwei Nachfolgern). Das vorrangige Einsatzgebiet solcher Binärbäume stellt das Strukturieren und die möglichst effiziente Suche in sortierten Datenmengen dar.

Graphviz nimmt Ihnen beim Umgang mit solchen Graphen Arbeit ab, wenn Sie das Programm richtig nutzen. Listing 3 zeigt, wie Sie einen solchen binären Baum mit der Software erstellen. Nachdem Sie zunächst in Zeile 2 das Aussehen aller Knoten als Rechteck festgelegt haben, definieren Sie in den Zeilen 4 bis 8 die Struktur und die Inhalte der Knoten.

Listing 3

digraph G {
node [shape=record, height=0.1];
knoten0 [label = "<l> | <m> H | <r>"];
knoten1 [label = "<l> | <m> D | <r>"];
knoten2 [label = "<l> | <m> A | <r>"];
knoten3 [label = "<l> | <m> P | <r>"];
knoten4 [label = "<l> | <m> W | <r>"];
knoten0:l -> knoten1:m;
knoten1:l -> knoten2:m;
knoten0:r -> knoten3:m;
knoten1:r -> knoten4:m;
}

Jeder Knoten verfügt über drei Elemente: Einen Verweis auf den nachfolgenden, linken Knoten (benannt mit l), ein mittleres Datenfeld mit Inhalt (benannt mit m) sowie einen Verweis auf den nachfolgenden, rechten Knoten (benannt mit r). Auf die einzelnen Elemente greifen Sie später über deren Namen zu.

In Zeile 10 verknüpfen Sie das linke Element von knoten0 mit dem mittleren Element von knoten1. Die anderen Knoten binden Sie in ähnlicher Weise ein. Das gewünschte Element des jeweiligen Knotens adressieren Sie über den Namen des Elements, durch einen Doppelpunkt separiert vom Namen des Knotens. Damit bestimmen Sie die Position, auf die der Pfeil zeigt. Das nachfolgende Übersetzen erzeugt die gewünschten Kästchen und Linien (Abbildung 3).

Abbildung 3: Die Pfeile für den binären Suchbaum setzt Graphviz automatisch an die richtigen Stellen, wenn Sie die korrekte Syntax verwenden.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Graphviz berechnet flexibel Graphen
    Statt sich über das Layout einer Grafik zu verkünsteln, konzentrieren Sie sich mit Graphviz ganz auf die Inhalte und überlassen der Software das Design.
  • Aufpoliert
    Das Programm Graphviz hilft beim Erstellen von Grafiken. Den letzten Schliff verleihen Sie den Ergebnissen aber am besten mittels LaTeX.
  • Diagramme erstellen mit Yed
    Mit Yed meistern Sie spielend selbst komplexe Flussdiagramme und Objektbäume. Dank intelligenter Ansichten und Hilfsfunktionen behalten Sie immer den Überblick.
  • GraphDB sucht Freund des Freundes

    Wozu braucht man eine Graphdatenbank? Daniel Kirstenpfad von der Sones GmbH erläuterte das in seinem Linuxtag-Vortrag anhand der hauseigenen Software.
  • Tote Links finden
    Jeder komplexere Internet-Auftritt bringt im Verlauf seiner Existenz zunehmend tote Links hervor. Mit Linkchecker spüren Sie Verweise ins Nichts ohne große Umstände auf.
Kommentare

Infos zur Publikation

LU 12/2014: ANONYM & SICHER

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Ubuntu 14.10 und VirtualBox
Ubuntu 14.10 und VirtualBox
Tim Schürmann, 08.11.2014 18:45, 0 Kommentare

Wer Ubuntu 14.10 in einer virtuellen Maschine unter VirtualBox startet, der landet unter Umständen in einem Fenster mit Grafikmüll. Zu einem korrekt ...

Aktuelle Fragen

Nach Ubdates alles weg ...
Maria Hänel, 15.11.2014 17:23, 4 Antworten
Ich brauche dringen eure Hilfe . Ich habe am wochenende ein paar Ubdates durch mein Notebook von...
Brother Drucker MFC-7420
helmut berger, 11.11.2014 12:40, 1 Antworten
Hallo, ich habe einen Drucker, brother MFC-7420. Bin erst seit einigen Tagen ubuntu 14.04-Nutzer...
Treiber für Drucker brother MFC-7420
helmut berger, 10.11.2014 16:05, 2 Antworten
Hallo, ich habe einen Drucker, brother MFC-7420. Bin erst seit einigen Tagen ubuntu12.14-Nutzer u...
Can't find X includes.
Roland Welcker, 05.11.2014 14:39, 1 Antworten
Diese Meldung erhalte ich beim Versuch, kdar zu installieren. OpenSuse 12.3. Gruß an alle Linuxf...
DVDs über einen geeigneten DLNA-Server schauen
GoaSkin , 03.11.2014 17:19, 0 Antworten
Mein DVD-Player wird fast nie genutzt. Darum möchte ich ihn eigentlich gerne abbauen. Dennoch wür...