Visualización de datos con Prefuse – Grafos

Comenzamos con este post una serie de entradas relacionadas con el uso de diferentes herramientas y técnicas de visualización gráfica de datos.

La visualización gráfica de datos es crucial para mostrar de una manera rápida y sencilla una gran cantidad de información, además de ser una útil técnica para generar información adicional acerca de esos mismos datos, que puede estar oculta pero que puede hacerse visible cuando esos mismos datos se relacionan de una forma visual.

La primera de las herramientas que se van a usar es la libreria en Java de desarrollo de visualizaciones gráficas llamada Prefuse. Prefuse es una libreria gratuita implementada en Java y de gran potencia para el desarrollo de visualizaciones de datos complejas. Permite el desarrollo de diferentes visualizaciones como grafos, árboles, mapas, etc. Es especialmente adecuada para su uso desde aplicaciones Java estándar o applets.

En este ejemplo se presenta una sencilla visualización usando un grafo que además implementa un sistema de fuerzas con fuerzas sencillas como la Ley de Hook o fuerzas gravitatorias, para dar mayor dinamismo e interacción a la visualización.

1. GraphML

Una de las capacidades de Prefuse es la de procesar información formateada en GraphML. GraphML es un lenguaje de etiquetas para definir grafos, es decir, un XML para definir grafos. Esto facilita exportar e importar información contenida en un grafo. En el ejemplo en cuestión, se usa GraphML para definir un grafo y cargarlo via Prefuse, tal que así:

2. Cargar el grafo

El GraphML se cargaría en Prefuse:

3. Clase de visualización del grafo

Seguidamente, se crea una clase que implementará la visualización del grafo:

4. Visualización del grafo

El grafo cargado anteriormente se pasa a la clase de visualización del mismo:

5. Contenedor de la visualización

Aunque ya se ha creado la visualización, falta agregar la misma al contenedor que la mostrará. Para ello se crea la clase DisplayBrowser:

Se añade la visualización al contenedor:

Por último, el contenedor de la visualización se puede agregar a cualquier otro contenedor, por ejemplo, un JPanel en una aplicación con SWING.

 prefuse_grafo

JNumbers muestra un grafo con los números naturales del 1 al 100. Cada nodo es un número que esta relacionado con sus correspondientes múltiplos y divisores.

Se puede descargar el proyecto completo para Eclipse de la aplicación desde este enlace.