Viikon VALO #193

Graphviz

Graphviz on automatisoitu työkalu graafien piirtämiseen.

 Graphviz piirtään huolellisesti sijoiteltuja graafeja sille annetusta tekstimuotoisesta tiedosta. Piirrettävän graafin tiedot kirjoitetaan tekstitiedostoon, joka kuvaa graafissa esiintyvät solmut ja niiden väliset kaaret. Solmuille määritellään niiden sisältöteksti sekä ulkoasu, eli väri, muoto, tyyppi sekä muita ominaisuuksia, ja kerrotaan, mitkä solmut on yhdistetty toisiinsa kaarilla. Kaarille voidaan niin ikään määritellä erilaisia ominaisuuksia, kuten väri, viivan tyyppi sekä tekstileima. Graphviz muodostaa saamastaan tiedosta graafin, jonka se sijoittelee parhaaksi näkemällään tavalla tasoon. Graphviz pyrkii minimoimaan kaarien päällekkäisyyksiä ja pitämään tuotetun kuvan muutenkin mahdollisimman selkeänä. Valittavissa on muutama eri tavoin optimoitu algoritmi, joilla tuotettujen kuvien solmut sijoitellaan hieman toisistaan poikkeavilla tavoilla.

Ohjelma osaa tuottaa kuvia muutamassa erilaisessa tiedostomuodossa, kuten: PS, PDF, SVG, FIG, PNG ja GIF. Näistä muodoista kuvia voidaan toki muuntaa vielä useampiin muotoihin ja vektorimuotoista SVG-kuvaa voidaan tietenkin myös jatkomuokata esimerkiksi Inkscapella. Ohjelma on erityisen käyttökelpoinen tieteellisten tulosten havainnollistamisessa, kun esitettävä graafimuotoinen materiaali on esimerkiksi jonkin ohjelman automaattisesti tuottamaa dataa.

Ohjelman syötteenään käyttämä DOT-tiedostomuoto on varsin selkeä ja ymmärrettävä, joskin solmuille ja kaarille voi valita niin monenlaisia ominaisuuksia, että niihin kannattaa tutustua sopivan dokumentaation ja esimerkkien kautta. DOT-tiedostossa kerrotaan ensimmäiseksi, onko kyseessä suunnattu vai suuntaamaton graafi (digraph tai graph) tämän jälkeen luetellaan aaltosulkeiden sisällä solmut ja kaaret, niiden ominaisuudet sekä koko graafia koskevat ominaisuustiedot. Esimerkiksi:

    digraph G {
        rankdir=LR;
        A -> B [color=red];
        A -> C [style=dotted];
        B -> D;
        C -> D [style=dashed, dir=both];
        C [style=filled];
        D [shape=box];
    }

Yllä oleva esimerkki määrittelee suunnatun graafin, joka koostuu neljästä solmusta, A, B, C ja D, joiden välille on määritelty kaaria "->" operaattorilla. Kaarien ja solmujen ominaisuuksille on määritelty oletusarvoista poikkeavia arvoja hakasulkujen väliin. Solmua ei tarvitse erikseen luetella, jos se esiintyy jonkin kaaren päätepisteenä eikä sille haluta antaa oletusarvoista poikkeavia ominaisuuksia. Graafit kasvavat oletuksena ylhäältä alas päin, mutta tässä esimerkissä on kasvusuunnaksu määritelty vasemmalta oikealle, eli LR.

Tekstimuodossa määritelty graafi käännetään halutun tyyppiseksi kuvaksi jollain tarjolla olevista komentoriviohjelmista: dot, neato, twopi, circo, fdp, sfdp ja patchwork. Nämä ohjelmat soveltavat solmujen ja kaarien sijoitteluun eri algoritmeja ja tuottavat siksi erinäköiset kuvat. Ohjelmat on optimoitu seuraaviin käyttöihin:

  • dot - Suunnatut graafit, erityisesti erityisesti puumaiset syklittömät graafit
  • neato - Suuntaamattomat graafit
  • twopi - Graafit säteittäisellä asettelulla, jossa yksi solmu on keskipiste ja muut etäisyyden mukaan kehinä sen ympärillä
  • circo - Ympyrän muotoinen asettelu
  • fdp - Suuntaamattomat graafit
  • sfdp - Suuntaamattomat graafit
  • patchwork - Klustereista koostuvien graafien esittämiseen puukarttoina.

Graafin asettelun laskemiseen sovelletaan graafiteorian tuloksia ja algoritmeja.

Edellä esitetty DOT-tiedosto käännetään kuvatiedostoksi esimerkiksi seuraavasti:

dot -Tpng graphviz.dot -o graphviz.png

Tuotettu lopputulos näyttää tältä:

Minimutkaisemmat graafit voivat muodostua myös aligraafeista. Aligraafeja voidaan käyttää ryhmittelemään graafin solmuja joko niiden asetusten määrittämiseen yhdellä kertaa samanlaisiksi taikka tai niiden sijoitteluun yhtenä ryppäänä.

Graphvizin ymmärtämän DOT-tiedoston luominen ohjelmallisesti on melko yksinkertaista. Lisäksi useimpiin ohjelmointikieliin löytyvät suoraan kytkennät Graphvizin käyttämiseen kirjastona. Monet ohjelmat hyödyntävätkin Graphvizia graafien luomiseen sen sijaan, että yrittäisivät itse laskea sopivaa sijoittelua graafin solmuille. Eräs tällainen ohjelma on debtree, joka tulostaa DOT-tiedoston pyydetyn Debian- ja Ubuntu-jakeluissa käytettävän deb-paketin riippuvuuksista.

Kotisivu
http://www.graphviz.org/
Lisenssi
Eclipse Public License (EPL)
Toimii seuraavilla alustoilla
Linux, Solaris, Windows, Mac OS X
Asennus
Linux-jakeluihin Graphviz löytyy suoraan paketinhallinnasta. Muille alustoille se on ladattavissa ohjelmiston kotisivulta.
Käyttöohjeet
Ohjelman dokumentaatiota
Graafien, solmujen ja kaarien ominaisuuksia
GraphViz for discrete math students

Teksti: Pesasa
Kuvakaappaukset: Pesasa