TikZ Graphdrawing Fragen Graphdrawing in TikZ Fallstudie Renée Ahrens, Olof Frahm, Jens Kluttig, Matthias Schulz und Stephan Schuster Institut für Theoretische Informatik Universität zu Lübeck 15.06.2011 1 / 53 TikZ Graphdrawing Fragen Inhaltsverzeichnis 1 TikZ 2 Graphdrawing 3 Fragen 2 / 53 TikZ Graphdrawing Fragen Übersicht 1 TikZ Einführung in TikZ Die Schichten von PGF Keys, Styles und Scopes Paths und Nodes Libraries Die graphs-Bibliothek Beispiel Weitere Informationen 2 Graphdrawing 3 Fragen 3 / 53 TikZ Graphdrawing Fragen Typische Probleme bei der Illustration von Texten y 1 1 2 sin α tan α = cos α x sin α −1 α cos α − 12 1 − 12 −1 Quelle: PGF-Manual 4 / 53 TikZ Graphdrawing Fragen Vorteile von TikZ volle Kontrolle über grafische Darstellung direkte Einbindung von Grafiken in TEX-Code und von TEX-Code in Grafiken keine externen Programme notwendig Schriften passend zu Fließtext Vereinheitlichung von Farben ... 5 / 53 TikZ Graphdrawing Fragen Die Schichten von PGF Frontend layer Basic layer System layer 6 / 53 TikZ Graphdrawing Fragen Die Schichten von PGF ... TikZ Kern ... ... Treiber-Abstraktion 7 / 53 TikZ Graphdrawing Fragen Keys Key-Value-Paare in Baum angeordnet (wie Unix-Verzeichnisbaum, /tikz und /pgf sind Pfade auf oberstem Level; es gibt /.cd). Unterstützen Macros, Styles (gleich mehr dazu) und Handler. Werden überall verwendet, für Parameter etc. \pgfkeys{/my key/.code 2 args=The values are ’#1’ and ’#2’.} \pgfkeys{/my key={a1}{a2}} 8 / 53 TikZ Graphdrawing Fragen Styles red box blue box \begin{tikzpicture}[outline/.style={draw=#1,fill=#1!20}] \node [outline=red] {red box}; \node [outline=blue] at (0,-1) {blue box}; \end{tikzpicture} Spezielle Keys, die durch Liste von Key-Value-Paaren ersetzt werden. Parametrisierbar wie normale Keys. 9 / 53 TikZ Graphdrawing Fragen Scopes \begin{scope}[red] \draw (0mm,10mm) -- (10mm,10mm); \draw (0mm,8mm) -- (10mm,8mm); \end{scope} \draw (0mm,6mm) -- (10mm,6mm); \begin{scope}[green] \draw (0mm,4mm) -- (10mm,4mm); \draw (0mm,2mm) -- (10mm,2mm); \draw[blue] (0mm,0mm) -- (10mm,0mm); \end{scope} Änderungen am Graphikzustand (Transformationen, Linienstärke) sind nur lokal gültig. Programmierbar: spezielle Keys am Anfang und Ende eines Scopes zugänglich. 10 / 53 TikZ Graphdrawing Fragen Paths \draw (0,0) [color=blue] -- (1,1) {[rounded corners] -- (2,0) -- (3,1)} [sharp corners] [color=red] -- (3,0) -- (2,1); Ein Pfad ist eine Folge von Liniensegmenten. Zeichen- und füllbar, Shading, Decorations. Auch hier Scopes, allerdings nicht mit Farben. 11 / 53 TikZ Graphdrawing Fragen Nodes third node second node first node \fill[fill=red] (0,0) node {first node} -- (1,1) node {second node} -- (0,2) node {third node}; Unabhängig von Pfaden auch wenn sie syntaktisch zusammen definiert werden (Knoten werden nach den Pfaden positioniert). Mit Anchors lassen sich Positionen am Knoten einfach referenzieren (z.B. left, right, above, below). Haben Shapes, z.B. Kreise, Rechtecke, aber auch komplexe UML-Knoten. 12 / 53 TikZ Graphdrawing Fragen Libraries Zusätzliche Funktionen werden mit usepgflibrary und usetikzlibrary eingebunden. Beispielsweise das Zeichnen von Automaten, Kalendern, Schaltungen, Schatten, Verläufen und Bäume. 13 / 53 TikZ Graphdrawing Fragen Die graphs-Bibliothek Was ist das? Einfache Syntax zur Spezifikation von Knoten sowie deren Kanten Beispiel: A -> { B->C}-D Bibliothek einbinden: \usetikzlibrary{graphs} 14 / 53 TikZ Graphdrawing Fragen Die graphs-Bibliothek Konzept: Node Chains A B C D E \ graph {A −> B ; C −> D −> E ; } ; 15 / 53 TikZ Graphdrawing Fragen Die graphs-Bibliothek Konzept: Chain Groups A B C D E F \ graph {A −> {B −> C , D −> E} −> F } ; 16 / 53 TikZ Graphdrawing Fragen Die graphs-Bibliothek Konzept: Node Sets A X B \node ( a ) at ( −1 ,0) {A } ; \node ( b ) at ( 1 , 0 ) {B } ; \ graph { ( a ) −> X −> ( b ) } ; 17 / 53 TikZ Graphdrawing Fragen Die graphs-Bibliothek Konzept: Node Sets B X A \ begin { t i k z p i c t u r e } [ new s e t=myset ] \node [ s e t=myset ] ( a ) at ( 1 , 0 ) {A } ; \node [ s e t=myset ] ( b ) at ( 1 , 1 ) {B } ; \ graph { X −> ( myset ) } ; \end{ t i k z p i c t u r e } 18 / 53 TikZ Graphdrawing Fragen Die graphs-Bibliothek Kanten A -> B Kante von A nach B A <- B Kante von B nach A A -- B Ungerichtete Kante zwischen A und B A <-> B Bidirektionale Kante zwischen A und B A -!- B Keine Kante zwischen A und B 19 / 53 TikZ Graphdrawing Fragen Beispiel Problem Folgender Graph soll planar gezeichnet werden: a c b d e 20 / 53 TikZ Graphdrawing Fragen Beispiel (Eine) Lösung Manuelle Korrektur der Positionen c b a d e 21 / 53 TikZ Graphdrawing Fragen Beispiel (Eine) Lösung TikZ Code: \ begin { t i k z p i c t u r e } [ e v e r y node / . s t y l e = . . . ] \node ( a ) at ( 6 , 1 . 5 ) { a } ; \node ( b ) at ( 0 , 2 ) {b } ; \node ( c ) at ( 4 , 2 ) { c } ; \node ( d ) at ( 6 , 0 . 5 ) {d } ; \node ( e ) at ( 3 , 0 ) { e } ; \ graph { ( a ) −− { ( c ) , ( d ) } ; ( b ) −− { ( c ) , ( d ) , ( e ) } ; ( c ) −− ( d ) ; ( d ) −− ( e ) } ; \end{ t i k z p i c t u r e } 22 / 53 TikZ Graphdrawing Fragen Weitere Informationen Hauptinformationsquelle: PGF/TikZ-Handbuch Tutorials Detaillierte Beispiele Referenzen Internet, bspw. www.texample.net Anschauliche Beispiele für viele Anwendungsfälle 23 / 53 TikZ Graphdrawing Fragen Übersicht 1 TikZ 2 Graphdrawing Was ist Graphdrawing? Funktionsweise Algorithmen Planare Graphen Bäume Beispiel mit Graphdrawing Weitere Informationen 3 Fragen 24 / 53 TikZ Graphdrawing Fragen Graphdrawing Domäne Mathematik und Informatik “Zeichnen von Graphen” 25 / 53 TikZ Graphdrawing Fragen Graphdrawing Domäne Mathematik und Informatik “Zeichnen von Graphen” automatisiert 25 / 53 TikZ Graphdrawing Fragen Graphdrawing Domäne Mathematik und Informatik “Zeichnen von Graphen” automatisiert Anwender gibt nur Knoten und Kanten an 25 / 53 TikZ Graphdrawing Fragen Graphdrawing Domäne Mathematik und Informatik “Zeichnen von Graphen” automatisiert Anwender gibt nur Knoten und Kanten an Algorithmen leiten dann den Graph ab 25 / 53 TikZ Graphdrawing Fragen Graphdrawing Beispiel Graph G = (K, V ) Knoten K = {A, B, C} Kanten V = {(A → B), (A → C)} Visualisierung als Baum 26 / 53 TikZ Graphdrawing Fragen Graphdrawing Erster Ansatz in TikZ A B C \ begin { t i k z p i c t u r e } \node ( a ) at ( 1 , 1 ) {A } ; \node ( b ) at ( 0 , 0 ) {B } ; \node ( c ) at ( 2 , 0 ) {C } ; \draw ( a ) −− ( b ) ; \draw ( a ) −− ( c ) ; \end{ t i k z p i c t u r e } 27 / 53 TikZ Graphdrawing Fragen Graphdrawing Anforderungen TEX-Distribution mit LuaTEX-Unterstützung Bspw. TeXLive 2009 aufwärts alternativ aktuelle Version von www.luatex.org Aktuelle PGF Version CVS Version Download von pgf.sourceforge.net 28 / 53 TikZ Graphdrawing Fragen Graphdrawing Verwendung in TikZ Paket tikz einbinden 29 / 53 TikZ Graphdrawing Fragen Graphdrawing Verwendung in TikZ Paket tikz einbinden TikZ-Bibliothek graphdrawing laden 29 / 53 TikZ Graphdrawing Fragen Graphdrawing Verwendung in TikZ Paket tikz einbinden TikZ-Bibliothek graphdrawing laden Entsprechende graphdrawing-Bibliotheken laden 29 / 53 TikZ Graphdrawing Fragen Graphdrawing Verwendung in TikZ Paket tikz einbinden TikZ-Bibliothek graphdrawing laden Entsprechende graphdrawing-Bibliotheken laden Algorithmenspezifischen Schlüssel angeben 29 / 53 TikZ Graphdrawing Fragen Graphdrawing Verwendung in TikZ Paket tikz einbinden TikZ-Bibliothek graphdrawing laden Entsprechende graphdrawing-Bibliotheken laden Algorithmenspezifischen Schlüssel angeben mit Lua-kompatiblen TEX übersetzen, bspw. lualatex 29 / 53 TikZ Graphdrawing Fragen Graphdrawing TikZ und Graphdrawing A B C \ u s e t i k z l i b r a r y { graphs , graphdrawing } \ u s e t i k z l i b r a r y { graphdrawing . t r e e s } \ begin { t i k z p i c t u r e } [ t r e e ] \ graph { A −> {B , C} } ; \end{ t i k z p i c t u r e } 30 / 53 TikZ Graphdrawing Fragen Graphdrawing Syntax Verwendung in TikZ Angabe des Algorithmus Auswahl siehe Handbuch Graph in TikZ oder graphs-Notation 31 / 53 TikZ Graphdrawing Fragen Graphdrawing Algorithmen graphdrawing.misc/.trees (Fallstudienergebnisse) AhrensFKSS2011 tree AhrensFKSS2011 minimize crossings noch weitere Tree-Algorithmen von Jannis Pohlmann graphdrawing.force (Jannis Pohlmann) spring layout spring electrical layout und viele mehr 32 / 53 TikZ Graphdrawing Fragen Funktionsweise Graphdrawing Keys Alle Keys normalerweise in /graph drawing. Aber der Einfachheit halber Weiterleitung nach /tikz/graph drawing scope im TikZ-Layer. Option algorithm spezifiziert den Algorithmus. 33 / 53 TikZ Graphdrawing Fragen Funktionsweise Lua Framework Klassen für Graph, Node, Edge, Path. (Mittlerweile mehr . . .) Module sind unabhängig von Dateien. Im Moment alles in pgf.graphdrawing. Algorithmen mit Namensschema drawGraphAlgorithm foo innerhalb von pgf.graphdrawing; automatisches Laden aus pgfgd-algorithm-foo.lua. 34 / 53 TikZ Graphdrawing Fragen Funktionsweise Eigener Algorithmus In pgfgd-algorithm-simple-demo.lua: pgf.module("pgf.graphdrawing") function drawGraphAlgorithm_simple_demo(graph) local radius = 28.908 -- corresponds to 1cm in TeX points local nodeCount = table.count_pairs(graph.nodes) -- count nodes local alpha = (2 * math.pi) / nodeCount local i = 0 for node in table.value_iter(graph.nodes) do node.pos:set{x = radius * math.cos(i * alpha)} node.pos:set{y = radius * math.sin(i * alpha)} i = i + 1 end end 35 / 53 TikZ Graphdrawing Fragen Funktionsweise Aufruf e c a f b d Wird produziert durch: \tikz [graph drawing scope, /graph drawing/algorithm=simple-demo] \graph { f -> c -> e ->[bend right] a -> {b -> {c, d, f}, e -> b}}; 36 / 53 TikZ Graphdrawing Fragen Funktionsweise Besser mit Stil Aber es geht auch besser über einen eigenen Stil: \tikzset{circular layout/.style={ graph drawing scope, /graph drawing/algorithm=simple-demo}} Folgendes ist allerdings noch besser (für zukünftige Updates gewappnet): \pgfgddeclarealgorithmkey{circular layout}{circular layout} {algorithm=simple-demo} Nun kann der entsprechend Stil wie immer verwendet werden: \tikz \graph [circular layout] ... 37 / 53 TikZ Graphdrawing Fragen Funktionsweise Parameter installieren Der Radius sollte parametrisierbar sein: local radius = tonumber(graph:getOption("/graph drawing/radius")) Dafür ist allerdings noch folgendes notwendig: \pgfgddeclareforwardedkeys{/graph drawing}{ radius/.graph parameter=evaluate math expression, radius/.parameter initial=1cm} Und entsprechend: \tikz \graph [circular layout, radius=1.5cm] ... 38 / 53 TikZ Graphdrawing Fragen Planare Graphen Funktionsweise Beliebige Graphen mit bzw. ohne Überschneidungen Optimierung von Graphlayout 39 / 53 TikZ Graphdrawing Fragen Planare Graphen Funktionsweise Beliebige Graphen mit bzw. ohne Überschneidungen Optimierung von Graphlayout Lokale Suche Intitales Graphlayout Schrittweises Verbessern bis Optimum erreicht 39 / 53 TikZ Graphdrawing Fragen Planare Graphen Funktionsweise Beliebige Graphen mit bzw. ohne Überschneidungen Optimierung von Graphlayout Lokale Suche Intitales Graphlayout Schrittweises Verbessern bis Optimum erreicht Problem - ist gefundenes Optimum auch globales Optimum? 39 / 53 TikZ Graphdrawing Fragen Planare Graphen Optimierung Modifikationsschritt des Graphlayouts Anordnung der Knoten in Gitternetz Versetzen eines Knotens um Layout zu verändern 40 / 53 TikZ Graphdrawing Fragen Planare Graphen Optimierung Modifikationsschritt des Graphlayouts Anordnung der Knoten in Gitternetz Versetzen eines Knotens um Layout zu verändern Optimierungsfunktion (Minimierung) Primär: Zählen der Kantenüberschneidungen Sekundär: Kantenlänge von 33% der längsten Kanten 40 / 53 TikZ Graphdrawing Fragen Planare Graphen Beispiel 5 3 1 6 4 2 41 / 53 TikZ Graphdrawing Fragen Der Baum Algorithmus Funktionsweise 1 3 Rekursiver Arbeitsweise 2 Verwendet eine Boxstruktur jede Rekursionsebene entspricht einer Box 4 6 5 7 42 / 53 TikZ Graphdrawing Fragen Der Baum Algorithmus Funktionsweise: Rekursion pro Rekursionsschritt: 1. Vergleich der Boxen anhand der Größe 2. Sortieren 3. Positionierung 43 / 53 TikZ Graphdrawing Fragen Der Baum Algorithmus Funktionsweise: Positionierung Kindboxen y-Koordinate = Höhe größter Box x-Koordinate = abhängig v. Nachbarbox Wurzelknoten: x-Koordinate = Mitte y-Koordinate = Standard 1 cm über Kindboxen 44 / 53 TikZ Graphdrawing Fragen Der Baum Algorithmus Parameter root (/graph drawing/root): Wurzel des Baums muss gesetzt werden level distance (/graph drawing/level distance): vertikaler Abstand zw. Knoten default: 1 cm sibling distance (/graph drawing/sibling distance): horizontaler Abstand zw. Knoten default: 1 cm 45 / 53 TikZ Graphdrawing Fragen Der Baum Algorithmus Beispiele (Parameter level distance) 1 2 3 \ begin { t i k z p i c t u r e } [ AhrensFKSS 2011 t r e e , l e v e l d i s t a n c e =1cm ] \ graph { 1 [ r o o t ] −> { 2 , 3 } } ; \end{ t i k z p i c t u r e } 1 \ begin { t i k z p i c t u r e } [ AhrensFKSS 2011 t r e e , l e v e l d i s t a n c e =2cm ] \ graph { 1 [ r o o t ] −> { 2 , 3 } } ; \end{ t i k z p i c t u r e } 2 3 46 / 53 TikZ Graphdrawing Fragen Beispiel Problem Man erinnere sich an das Beispiel aus Kapitel Eins: a c b d e 47 / 53 TikZ Graphdrawing Fragen Beispiel Lösung mit Graphdrawing e d a b c \ begin { t i k z p i c t u r e } [ AhrensFKSS 2011 minimize c r o s s i n g s ] \ graph { a −− { c , d } ; b −− { c , d , e } ; c −− d ; d −− e } ; \end{ t i k z p i c t u r e } 48 / 53 TikZ Graphdrawing Fragen Weitere Informationen Stand Bei Abgabe: TikZ-Frontend mit graphs-Syntax Lua Backend Zwei Algorithmen Aktuell: “Normale” TikZ-Notation erlaubt Vielzahl an Algorithmen 49 / 53 TikZ Graphdrawing Fragen Weitere Informationen Stand Jannis Pohlmann: Diplomarbeit Einteilung in Algorithmenklassen Algorithmen für Bäume, Force-based Algorithmen, planare sowie ebenenbasierte Algorithmen u.v.m. Jakob Kuczewski: Bachelorarbeit 50 / 53 TikZ Graphdrawing Fragen Weitere Information Informationsquellen Erste Anlaufstelle: PGF/TikZ-Handbuch (CVS-Version!) Kapitel Algorithmic Graph Drawing (18) Force-Based Graph Drawing Algorithms (39) Miscellaneous Graph Drawing Algorithms (40) weitere werden kommen 51 / 53 TikZ Graphdrawing Fragen Übersicht 1 TikZ 2 Graphdrawing 3 Fragen 52 / 53 TikZ Graphdrawing Fragen Diskussion Noch Fragen offen? Vielen Dank für eure Aufmerksamkeit 53 / 53