Pomoč:Graphviz
Iz E-študij, proste zakladnice študentskega znanja
Graphviz je dodatek e-studij.si, ki omogoča da s pisanjem besedila podobno kot formule lahko rišemo tudi grafe.
- Poskusi, igraj se v peskovniku
[uredi] Dot jezik
Atribute se grafom določa v dot jeziku, za katerega je na voljo tudi dober vodič. Brez prebiranja tega vodiča bo izdelava grafov zelo neintuitivna ker se grafi brez znanja dot jezika kaj kmalu začno obnašati "po svoje".
[uredi] Atributi
Atributi so lastnosti posameznih elementov grafa (konice puščic, debeline črt, pisave, oblike okvirčkov, barve okvirčkov itd...) in so dokumentirani.
- orientation=land
- vertikalni napis (berljiv z desne)
- size=
- todo
- center=true
- centralna poravnava
- shape=oblika vozlišča
- parallelogram (paralelogram)
- circle (krog)
- octagon
- house
- arrowtail=oblika puščice
- none
- ...
- ranksep="razmik med nivoji"
- 1.5
- ...
- rank="nivo"
- same
[uredi] Risanje grafov
V splošni dokumentaciji graphviz-a je napisano mnogo o risanju, za začetnike pa bo najlažje če si ogledajo kodo sledečih primerov.
Zapomnimo si najprej to, da se grafi vedno začnejo in končajo z oznakama:
<graphviz> digraph G {
koda grafa
} </graphviz>
Enostaven usmerjen graf bi ustvarili z ukazom...
|
|
digraph G { Hello->World } |
Enostaven neusmerjen graf bi ustvarili z ukazom...
|
|
graph G { Hello--World } |
Zahtevnejši primer bi bil graf različnih variant stavka, kateri vsebuje tudi presledke in pike...
|
|
digraph G { "Dober dan"->"otroci." "Dober dan"->"dame." "Dober dan"->"gospodje." } |
Včasih pri zaporedju elementov, ki si sledijo, koda grafa izgleda enostavnejša, pa še napiše se hitreje, če jih zapišemo enostavno v zaporedju. Ker pa izgleda tak kratek graf lepše če je zapisan vodoravno lahko uporabimo ukaz rankdir ter mu nastavimo LR (left-right)...
|
|
digraph G { rankdir = "LR" a -> b -> c -> d a -> 1 -> 2 -> 3 -> d b -> 2 } |
Lahko se zgodi, da bomo imeli dve enaki besedi, kateri ne želimo da bi bili združeni v eno kot je praksa pri zgornjih grafih. To dosežemo tako da kreiramo 2 objekta z različnimi imeni in istim besedilom.
|
|
digraph G { a [label="foo"] b [label="foo"] a -> bar b -> bar } |
S spreminjanjem parametrov lahko narišemo tudi zahtevnejše grafe:
|
|
digraph G { size ="4,4"; main [shape=box]; /* this is a comment */ main -> parse [weight=8]; parse -> execute; main -> init [style=dotted]; main -> cleanup; execute -> { make_string; printf} init -> make_string; edge [color=red]; // so is this main -> printf [style=bold,label="100 times"]; make_string [label="make a\nstring"]; node [shape=box,style=filled,color=".7 .3 1.0"]; execute -> compare; } |
S poznavanjem dot jezika lahko tudi dodamo v grafe podgrafe in jih povežemo skupaj:
|
|
digraph G { compound=true; subgraph cluster0 { a -> b; a -> c; b -> d; c -> d; } subgraph cluster1 { e -> g; e -> f; } b -> f [lhead=cluster1]; d -> e; c -> g [ltail=cluster0, lhead=cluster1]; c -> e [ltail=cluster0]; d -> h; } |
Za več primerov si oglejte povezavo pri dot jeziku v začetku članka.