Igraph – Rappresentare grafi… con l’amaro in bocca

Quando si lavora con complesse strutture dati, specie quando queste strutture sono generate a partire da dati offuscati, è estremamente importante utilizzare uno strumento in grado di rappresentare visivamente tali grafi. Io stesso ho perso alcune settimane dietro i problemi matematici che si nascondono dietro la visualizzazione dei grafi. Un esempio fra i tanti riguarda il problema di disporre i nodi in modo tale da minimizzare gli accavallamenti degli archi.

Non avevo però la pretesa di riscrivere da capo una libreria che disegnasse grafi e alberi in quanto ero sicuro che esistesse già qualcosa di pronto nel marasma del codice libero.

La risposta è iGraph. Fra tutte le librerie che ho visto e provato questa è sicuramente la più interessante. Il punto di forza di questa libreria consiste nel numero di piattaforme e linguaggi che supporta: C/C++, Python e anche Ruby più altre piattaforme di statistica. Inoltre, dando un occhiata alle API e alla documentazione, sembra molto semplice, intuitiva e ben tenuto.

Allora lo installo sfruttando i repository di Launchpad (ho utilizzato karmic anche se uso Sidux e pare che tutto funzioni bene). Scrivo un codicillo di prova e ho la brutta sorpresa:

NotImplementedError: showing plots is not implemented on this platform: Linux

Accidenti! La funzione principe del programma non è ancora stata implementata!? Non vi nascondo che ci sono rimasto malissimo. Anche perché era una libreria di cui avevo bisogno per visualizzare alcuni grafi di stato di piccoli progetti di prova di IA.

Pazienza. Guarderò il codice e cercherò di contattare gli sviluppatori per sapere come procede l’implementazione di questa funzionalità. Magari posso dare anche una mano. Alla fine è questo il bello del software libero.

UPDATE:

HO RISOLTO IL PROBLEMA! Ora funziona bene anche la visualizzazione. Vi aggiornerò a breve!

SEGUIMI SU TWITTER

8 comments on “Igraph – Rappresentare grafi… con l’amaro in bocca

  1. Una volta usai graphviz. La visualizzazione non era bellissima, però funzionava. La cosa carina di graphviz è che sostanzialmente potevi usare qualunque linguaggio, bastava che scrivevi su un file di testo le informazioni relative al grafo e poi davi questo file al programma vero e proprio che te lo mostrava.

    • Lo fa anche igraph. Supporta un casino di formati: matirici di adiacenza, matrici di incidenza, il file di testo di graphviz etc etc.
      La cosa bella di igraph è che non serve solo a disegnare grafi ma ha anche tutta una serie di algoritmi per la manipolazione e analisi di un grafo veramente ben fatti! 😀

  2. Più complete di quanto avessi capito. Si integrano bene all’interno di un programma? Mi spiego: se volessi all’interno di un programma mostrare un grafo sono una buona scelta?

    • Permette di salvare l’output in molti formati (png, pdf, dvi) e di esportare i grafi in altrettanti formati (anche come i file di testo di graphviz a cui accennavi prima).
      Io direi che si integra bene 🙂 ma dovrei fare altre prove per conoscerlo meglio.

  3. Qualcuno può darmi qualche delucidazione in più in merito alla questione della visualizzazione. Utilizzo iGraph con C. Grazie.

    • Il problema consiste nel fatto che iGraph su linux non riesce a trovare il visualizzatore di default. Quindi la soluzione consiste nel generare il file tramite l’apposita funzione invece di usare la visualizzazione.

  4. Nella sezione “Generating Layouts for Graph Drawing”, che ho potuto trovare nel manuale di riferimento di iGraph, c’è la possibilità di ottenere i vari layout utilizzabili, poi, mediante un ulteriore software di visualizzazione. La cosa mi sembra abbastanza macchinosa. Voi che ne dite ? Possibile che nemmeno con VTK non ci sia il modo ?