Große Mengen hierarchischer Information zu zeichnen, ist mühsam und zeitaufwendig. Diese Aufgabe sollte man lieber nicht manuell, sondern mit Hilfe eines geeigneten Software-Werkzeugs erledigen. TreeJuggler ist so ein Werkzeug. Es kann hierarchische Information platzsparend darstellen und die Zeichnung auf beliebige Seitenverhältnisse optimieren. Hier eine kurze Einführung…
Erste Schritte
Zum Ausprobieren von Gravisto und TreeJuggler gibt es Informationen auf der Gravisto-Homepage auf Github. Bitte beachten, dass die frühere Gravisto-Homepage nicht mehr verfügbar ist (siehe hierzu Neues Zuhause für Gravisto). Nach dem Checkout des Java-Source-Codes mit Hilfe der bereitgestellten Datei gravisto.psf steht eine Launch Configuration für 64 und 32 Bit in der Eclipse IDE zur Verfügung.
Die TreeJuggler-Toolbox
Wie Gravisto funktioniert, ist in dem Artikel Jonglieren mit Bäumen – Wie man hierarchische Information platzsparend darstellt recht ausführlich beschrieben. Kurz zusammengefasst: TreeJuggler ist ein Werkzeug, um Bäume platzsparend zu zeichnen. Es ist ein Plugin für Gravisto und kann sowohl mit Hilfe einer grafischen Benutzeroberfläche als auch von der Kommandozeile verwendet werden. TreeJuggler ist ein Werkzeugkasten, der mehrere Algorithmen enthält, die im Zusammenspiel eine schöne kompakte Zeichnung erstellen können. In der grafischen Benutzeroberfläche wird diese Toolbox durch die Toolbar in Abbildung 1 repräsentiert:
Es folgt eine kurze Beschreibung der Algorithmen. Wir gehen dabei die Symbole aus Abbildung 1 von links nach rechts durch:
- DAG-Splitter: Dieser Algorithmus macht aus einem gerichteteten azyklischen Graphen (engl.: „directed acyclic graph“ oder kurz „DAG“) einen Baum, indem diejenigen Knoten, die mehr als eine eingehende Kante haben, dupliziert werden.
- Root Changer: Ändert die Wurzel eines Baums, indem die Richtung der Kanten entsprechend umgedreht werden.
- Tree K-nary Maker: Oft können Bäume nur schwer platzsparend dargestellt werden, weil einige Knoten zu viele Kindknoten haben. Dieser Algorithmus verwendet Hilfsknoten, um den Grad des Baums auf ein einstellbares k zu reduzieren.
- Helper Node Stripper: Wenn die Zeichnung fertig ist, möchte man natürlich die unschönen Hilfsknoten wieder loswerden.
- Tip-over-Layout: Ein Layout-Algorithmus, bei dem alle Kindknoten eines Knotens entweder nebeneinander oder untereinander angeordnet werden. Abbildung 1 des Artikels Jonglieren mit Bäumen – Wie man hierarchische Information platzsparend darstellt zeigt ein gutes Beispiel für eine Tip-over-Zeichnung.
- HV-Layout: Ein Layout-Algorithmus für binäre Bäume, bei dem ein Kindknoten auf der rechten Seite und der andere unter dem Vaterknoten platziert wird. Eine kurze Einführung findet sich hier.
- Layout Refresher: Die Layout-Attribute der Zeichnung können manuell bearbeitet werden. Zum Beispiel kann in einer Tip-over-Zeichnung die Reihenfolge der Unterbäume geändert oder die Ausrichtung der Kindknoten eines bestimmten Knotens von horizontal zu vertikal geändert werden. Nach einem Klick auf „Refresh“ wird die Zeichnung entsprechend geändert.
Das Kommandozeilen-Interface
Das „TreeJuggler Command Line Interface“ (oder kurz: TreeJugglerCLI) verwendet eine Heuristik, die im Abschnitt Lockermachen mit TreeJuggler des Artikels Jonglieren mit Bäumen – Wie man hierarchische Information platzsparend darstellt genauer erklärt wird, um automatisch gute Zeichnungen zu erstellen. Hier ist ein Beispiel-Aufruf:
TreeJugglerCLI -i tutorial-de.dot -o tutorial-de.pdf -d 50 -f -c
Die folgenden Kommandozeilenoptionen stehen zur Verfügung (obligatorische Parameter sind mit einem Sternchen markiert):
-i: Gibt die .dot– oder .graphml-Eingabedatei an (*).
-o: Gibt die .graphml-, .pdf- or .png-Ausgabedatei an (*).
-d: Bestimmt den Abstand zwischen den Knoten (*).
-r: Das Verhältnis von Breite zu Höhe, auf das die Zeichnung optimiert werden soll (* oder alternativ -f). Ein Video, das die Auswirkung dieses Parameters veranschaulicht, ist in dem Artikel Hierarchische Information in Form bringen zu finden.
-f: Gibt das Papierformat an, das verwendet werden soll. Ohne weitere Angaben wird der automatische Modus verwendet.
-c: Einfärbe-Modus. Teilbäume, die durch den DAG-Splitter dupliziert wurden, werden eingefärbt. Wenn der Parameter nicht verwendet wird, erfolgt keine Einfärbung.
-a: Zeichnet die Richtung der Kanten als Pfeile.
-h: Wird der Parameter angegeben, erfolgt keine Ersetzung der Hilfsknoten durch Kantenknicke.
Der obige Beispiel-Aufruf des TreeJugglerCLI erzeugt die folgende Zeichnung (als PDF):
Fazit
Ich hoffe, dass ich einen groben Einblick geben konnte, wie man den TreeJuggler verwendet. Dieses Tutorial wird im Laufe der Zeit noch erweitert. Für Feedback wäre ich sehr dankbar. Habe ich etwas vergessen?