Graphviz – diagramy i schematy (1/2)

TLDR: Graphviz to program pozwalający na tworzenie schematów na podstawie komend w dedykowanym języku: dot.

Autorka zdjęcia: https://www.pexels.com/@divinetechygirl

Tworzenie schematów bywa trudnym zajęciem. By zostało dobrze zrobione, wymaga od autora umiejętności graficznych. Dodanie nowych elementów bardzo często wiąże się z koniecznością zmiany układu całego schematu. Dodatkowo, wersjonowanie takiego pliku bywa utrudnione – zwłaszcza jeżeli jest on zapisany w formacie graficznym trudno wychwycić różnicę pomiędzy kolejnymi iteracjami pliku.

Graphviz pozwala wyeliminować obie te słabości i wygenerować estetyczne diagramy, na podstawie „kodu źródłowego”, w języku dot. Aby wypróbować jego możliwości, można go oczywiście zainstalować, ale można też wykorzystać jedno z dostępnych API, np to na witrynie GitHuba.

Załóżmy, że chcemy stworzyć wykres, obrazujący przebieg zwrotek piosenki Hey Jude Beatelsów:

Kod źródłowy dla takiego wykresu będzie wyglądał następująco:

digraph G {
  node [shape = box];
  
  /*1 zwrotka*/
  start -> negation -> worsening -> song_improvement -> 
    remembering -> permission -> indication -> 
    start_permission -> improvement;
  
  improvement -> better;
  waaaaaa -> na;

  
  /*2 zwrotka*/
  negation -> fear -> conquering ->  remembering -> 
  injection -> indication -> origin -> improvement;
  
  /*3 zwrotka*/
  negation -> disappointment -> retrieval -> remembering;

  start [label = "Hey Jude"];
  negation [label = "don't" shape = octagon];
  worsening [label = "make it bad"]
  song_improvement [label = "take a sad song and make it better"]
  remembering [label = "remember to"]
  permission [label = "let her into your heart"]
  indication [label = "then you"]
  start_permission[label ="can start"]
  improvement[label = "to make it better"]
  
  fear[label = "be afraid"]
  conquering[label = "you were made to go out and get her"]
  injection[label = "let her under your skin"]
  origin[label = "begin"]
  
  disappointment[label = "let me down"]
  retrieval[label = "you have found her, now go and get her"]
  
  subgraph cluster_na {
    color=lightgrey;
    na -> na;
    label = "na";
  }

  subgraph cluster_better {
    color=lightgrey;
    better -> better -> waaaaaa;
    label = "better";
  }
}

Dostępne są dwa rodzaje grafów – skierowane digraph oraz nieskierowane graph.

Jak można zaobserwować, diagram składa się z 3 głównych elementów:
– węzłów (node)
– krawędzi (egde)
– podgrafów (subgraph)
Każdemu z nich mogą zostać przypisane atrybuty. Do najważniejszych z nich należy atrybut label – odpowiada on za to, jak będzie podpisany dany węzeł bądź krawędź. Można również ustawić tam kolor, (color), kształt (shape) bądź wypełnienie. Ich pełna lista jest dostępna tutaj.

Polączenia pomiędzy węzłami tworzy się poprzez zastosowanie łącznika ->, jeżeli chce się pokazać kierunek, bądź — jeżeli chce się pokazać jedynie połączenie.

Komentarze można dodawać w takim samym stylu jak w C/C++ – jednolinijkowe porzez //, wielolinijkowe przez /* */.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *