Met Graphviz kan je structuren visualiseren. Een zeer kort educatief voorbeeld als introductie voor het maken van illustraties.
De mogelijkheden zijn eindeloos maar daardoor raak je ook gauw de weg kwijt. Daarom volgt hier een voorbeeld waar je altijd op terug kan vallen als de vraag “hoe zat het ook alweer” ontstaat.
Tip: Persoonlijk vind ik ik het vooral fijn dat je snel verbanden kan leggen middels een tekstbestand, het on the fly kan visualiseren om vervolgens verder te mijmeren over het probleem wat je probeert op te lossen. Het wat grotere voorbeeld illustreert dat goed.
Table of Contents
Waarom visualiseren we structuren?
- Brein snapt patronen, geen lijsten.
- Relaties worden zichtbaar.
- Complexiteit wordt overzicht.
- Misverstanden verdwijnen.
Het principe is als volgt, eerst wordt een tekstbestand (.dot) gemaakt die de verbanden bevat. Daarna wordt hiervan een afbeelding gemaakt.
Installeren: programma, https://graphviz.org/download/ of via repository, bijvoorbeeld “sudo apt install graphviz“
Voorbeeld: Bestand “input.dot”:
digraph D {
A -> B
A -> C
}Commandoregel
$ dot -Tsvg input.dot > output.svgof
$ dot -Tsvg input.dot -o output.svg“output.svg” ziet er zo uit:
Zo eenvoudig kan het zijn en dat is vaak genoeg.
Ook complexere dingen kunnen eenvoudig verwerkt worden, bijvoorbeeld componenten van een programma om overzicht te houden:
digraph D
{
label = "Coordinate Building Blocks";
// $ dot -Tsvg building_blocks.dot -o building_blocks.svg
"VirtCrdList" -> "DrawOptions"
"DrawOptions" -> "DrawCrdList"
"VirtCrdList" -> "GpsToRd"
"GpsToRd" -> "VirtCrdList"
"VirtCrdList" -> "RdToGps"
"RdToGps" -> "VirtCrdList"
"VirtCrdList" -> "WriteCrdList"
"WriteCrdList" -> "Editor"
"Editor" -> "ReadCrdList"
"ReadCrdList" -> "VirtCrdList"
"ReadCrdCsv" -> "VirtCrdList"
"PointSelection" -> "NearestPointPath"
"NearestPointPath" -> "VirtCrdList"
"GpxFile" -> "ParseGPX"
"ParseGPX" -> "VirtCrdList"
"3tlFile" -> "Parse3tl"
"Parse3tl" -> "VirtCrdList"
"SpreadSheetFile" -> "ReadCrdCsv"
"VirtCrdList" -> "WriteCrdCsv"
"WriteCrdCsv" -> "SpreadSheetFile"
}Hierna volgen nog wat voorbeelden.
Voorbeelden
Basis DOT-start
digraph Voorbeeld {
rankdir=LR
node [shape=box, fontname="sans-serif"]
A -> B
A -> C
}rankdir=LR = links-naar-rechts (TD = top-down)
node[...] = standaardvorm/stijl
shape=box = kader
Fonts
Zelfde voorbeeld, zie commentaar in code… Doe je niets dan krijg je het systeemfont met schreef.
digraph Demo {
rankdir=LR
// Optie 1: laat systeem kiezen (aanrader)
node [shape=box]
// Optie 2: expliciet sans-serif, platformonafhankelijk maar wel systeemfont
// node [shape=box, fontname="sans-serif"]
// Optie 3: voorbeeld Windows voor mensen die dat willen
// node [shape=box, fontname="Arial"]
// Optie 4: voorbeeld voor meer platformonafhelijk (maar wel DeJaVu installeren)
// node [shape=box, fontname="DejaVu Sans"]
A -> B
A -> C
}Met labels en clusters
digraph Netwerk {
rankdir=LR
node [shape=box, fontname="Arial"]
subgraph cluster_server {
label="Server"
S1 [label="Web"]
S2 [label="DB"]
S1 -> S2
}
subgraph cluster_client {
label="Client"
C1 [label="Browser"]
}
C1 -> S1 [label="https"]
}Frame, fonts, richting
digraph Demo {
rankdir=TB
node [shape=ellipse, fontname="Arial", fontsize=12]
edge [fontname="Arial", fontsize=10]
Start -> Idee -> Structuur -> Diagram -> Inzicht
}Flow met keuze
digraph Flow {
rankdir=LR
node [fontname="DejaVu Sans"]
Q [shape=diamond, label="Structuur?"]
Y [shape=box, label="Visualiseren"]
N [shape=box, label="Lijstje"]
Q -> Y [label="Ja"]
Q -> N [label="Nee"]
}Tags
rankdir=LRofrankdir=TBshape=box,ellipse,diamondcluster_…geeft framelabel="tekst"overalnode[...]enedge[...]= defaults- Laat
fontnameleeg voor autosans; specificeer alleen als stijl echt uitmaakt.
Meer voorbeelden
Op deze link tref je heel wat voorbeelden aan. De taal staat hier beschreven en wikipedia heeft een korte introductie.