Algoritmo de diseño automático de gráficos


Para simplificar el problema, tengo un gráfico que contiene nodos y bordes que están en un plano 2D.

Lo que quiero hacer es hacer clic en un botón y hacer que el diseño automático del gráfico se vea limpio. Con eso me refiero al cruce mínimo de bordes, buen espacio entre nodos, tal vez incluso representar la escala del gráfico (bordes ponderados).

Sé que esto es completamente subjetivo de lo que es un gráfico de aspecto limpio, pero ¿alguien sabe de un algoritmo para empezar, en lugar de reinventar la rueda?

Gracias.

Author: osgx, 2011-02-17

5 answers

Te sugiero que eches un vistazo a graphviz. El programa dot puede tomar una especificación de un gráfico y generar una imagen de la red para usted algo "limpiamente". El enlace "teoría" en esa página te da algunos enlaces que podrían ser relevantes si estás interesado en el trasfondo teórico.

 13
Author: Noufal Ibrahim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-17 11:46:45

Encontrará http://graphdrawing.org/ y este tutorial, por Roberto Tamassia, profesor en la Universidad de Brown, bastante útil.

Me gustan mucho las Técnicas Dirigidas por la Fuerza (pp.66-72 en el tutorial) como el Spring Embedder.

Asumes que hay un resorte u otra fuerza entre dos nodos adyacentes y dejas que la naturaleza (simulación) haga el trabajo:)

 63
Author: ypercubeᵀᴹ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-08 20:12:54

También JGraph si quieres los layouts en Java (trabajo en el proyecto).

 4
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-06 09:47:49

Diría que como Noufal Ibrahim, pero también podría mirar con más precisión la API C del proyecto graphviz. Incluye una lib para construir su gráfico (libgraph.pdf ) con todos los nodos y bordes, y una lib para diseñar el gráfico ( libgvc.pdf ) (simplemente calcule la posición de cada nodo), para que luego pueda mostrarlo en su propia interfaz de usuario, por ejemplo.

 2
Author: jslap,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-17 15:56:23

Una buena guía visual de cómo se ven realmente los diseños más populares: siga el enlace

 1
Author: Diana Jobs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-18 13:39:22