Graphdrawing in TikZ - Universität zu Lübeck

Werbung
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
Herunterladen