October 22nd, 2008 @ 2:38pm | njames | Categories Research | No Comments »
Dans le cadre de mes travaux de thèse, je construis des graphes à l'aide de la bibliothèque Java Jung (la 1.7 cependant, pas la 2.x qui inclus les generics et encore en beta), et qui utilise Colt pour les opérations sur les matrices. Pour les formats de stockage des graphes, il existe de nombreux standards:
  • dot graphviz
  • GML, Graph Modelling Language, non XML
  • GML-XML
  • GraphML
Jung ne permet de sérialiser les graphes que dans le format GraphML, donc pas de Graphviz dot, c'est assez embêtant car les applications de visualisation de graphe prennent en entrée du Graphviz dot ou du GML, et assez rarement du GraphML. C'est un point de vue personnel, mais le GraphML est vraiment un format de stockage pour les graphes au sens type de donnée abstrait, comparé à Graphviz dot ou GML qui attaquent aussi directement le rendu du graphe. De plus, les détracteurs du GraphML peuvent dire que c'est du XML donc verbeux et coûteux en parsing mais GML n'est pas moins verbeux... Cependant, il est intéressant de convertir du GraphML en Graphviz dot, par exemple pour illustrer un article car il existe de nombreuses macros latex pour importer du Graphviz dot.
Pour la conversion de standard, par exemple convertir de GraphML vers Graphviz dot
  • avec graph-easy, un script perl, cependant j'ai un problème avec graph-easy, il semble qu'il n'aime pas les GraphML en input. Il imprime sur la sortie d'erreur mon fichier GraphML suivi de:

    not recognized by Graph::Easy::Parser::Graphviz at /usr/local/bin/graph-easy line 87
    En précisant le format d'entrée, ça ne fonctionne pas mieux:
    nicolas@trantor:~/Desktop$ graph-easy --from graphml graph.xml graph.dot
    Unknown input format 'graphml' at /usr/local/bin/graph-easy line 332.
  • graph-tool: Très long à compiler, comme indiqué sur la page d'accueil du projet. Si un prefix est précisé dans le configure, il faut modifier le script python graph-tool, car il ne trouve pas la library, alors ajouter dans le script:

    sys.path.append("../lib/python2.5/site-packages")
Visualisation
  • avec GraphViz:
    dot -Tps graph.dot -o graph.ps
Visualisation interactive
  • tulip, très intéressant celui là.
  • zgrviewer: voir http://zvtm.sourceforge.net/zgrviewer.html#download (mais bug sous linux, probablement à cause de la JVM et le forwarding sous X, j'avais vu une exception là dessus, mais j'arrive pas à la reproduire). Mais en le recompilant, ça fonctionne bien http://zvtm.sourceforge.net/zgrviewer/doc/build.html. Le problème vient probablement du bug dans Java 1.6 pour Linux à propos de Xlib/XCB qui a été corrigé depuis. Voir aussi
  • gephi
  • InfoVis cyberinfrastructure, ivc (s'appuie très largement sur Jung, je pense que ce n'est pas adapté aux large graphs).
  • InfoVis Toolkit, ivtk (INRIA futurs, LRI, IN-SITU project)
  • Walrus
  • Pajek
Remarques
  • visualiser des Graphviz dot avec une application web, http://ashitani.jp/gv/.
  • il existe un plugin Eclipse pour écrire des Graphviz dot, Graphviz Eclipse Plugin. Cependant la présence de ce plugin fait que les icônes de certains types d'images, dans l'arborescence d'un projet, sont remplacées par l'icône "fichier texte" (notamment les jpg et png)... un bug ?