Generación automática de gráficos con Graphviz

Habitualmente utilizo diferentes herramientas para dibujar gráficos o diagramas, como Visio o Dia, sin embargo hay situaciones en las que realizar estos gráficos a mano no es recomendable. Por ejemplo estoy realizando una serie de experimentos en los que es necesario mostrar como resultado una serie de grafos con un número alto de vértices, por lo que el dibujarlos a mano con cualquiera de una de estas herramientas es una tarea bastante laboriosa.

Buscando alguna otra alternativa he recordado que Protégé, una herramienta para el diseño de Ontologías, utilizaba a su vez otra librería, llamada Graphviz, para la representación gráfica de los grafos RDF resultantes.

He echado un vistazo a la librería y he visto que dispone de varios comandos que permiten realizar toda clase de gráficos basados en grafos y que además existían paquetes para Ubuntu, así que un poco de apt-get lo he instalado en un visto y no visto.

$ sudo apt-get install graphviz

Para probarlo podemos realizar el típico «Hola Mundo», con un grafo dirigido con dos nodos, guardando el resultado como una imagen png, para lo cual se usa el comando dot o algunas de sus variantes como neato, twopi, circo, fdp o sfdp, en función del tipo de grafo que deseemos..

$ echo "digraph G {Hola->Mundo}" | dot -Tpng >hola.png

De todas formas el verdadero partido a este comando se lo podemos sacar definiendo el grafo, con los cientos o miles de nodos que queramos, mediante un archivo de texto. De esta forma podemos tener un programa que genere el archivo de representación del grafo automáticamente y utilizar dot para procesarlo y generar la imagen.

El siguiente fragmento de código muestra un ejemplo de gráfico obtenido de la ayuda.

digraph original {
               a -> b -> c;
      e -> f -> g;
               a -> {x y};
               b [shape=box];
               c [label="hello\nworld",color=blue,fontsize=24,
                    fontname="Palatino-Italic",fontcolor=red,style=filled];
               a -> z [label="hi", weight=100];
               x -> z [label="multi-line\nlabel"];
               edge [style=dashed,color=red];
               b -> x;
               {rank=same; b x}
}

Y para terminar os muestro un ejemplo de un grafo que he generado automáticamente con un subconjunto de etiquetas de una folksonomía según la relación semántica existente entre ellas.

Twitter Digg Delicious Stumbleupon Technorati Facebook Email

Un Comentario para “Generación automática de gráficos con Graphviz”

  1. He usado ese programa pero ayudado de Máxima (el de matemáticas). Funcionan bien juntos aunque de este usábamos poquito, se veía buena pinta. :d