Graphviz

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.

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.svg

of

$ 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=LR of rankdir=TB
  • shape=box, ellipse, diamond
  • cluster_… geeft frame
  • label="tekst" overal
  • node[...] en edge[...] = defaults
  • Laat fontname leeg 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.

Leave a comment