Cómo evitar que los bordes en graphviz se superpongan entre sí


Tengo un gráfico que he creado en graphviz, pero el problema es que los bordes se superponen entre sí (tengo 5-7 nodos en cada fila), por lo que es difícil decir para cada nodo cuáles son los nodos que conecta.

¿Cómo puedo hacer que los bordes no se superpongan entre sí? Que se crucen está bien.

Author: David Rabinowitz, 2010-10-19

3 answers

Asumo que tienes un gráfico dirigido que diseñas con punto.

No creo que haya un interruptor mágico para evitar la superposición de bordes. Graphviz intenta hacer eso fuera de la caja.

Algunas sugerencias que pueden ayudar, dependiendo del gráfico:

  • concentradores de aristas (concentrate=true): Fusionan múltiples aristas con un punto final común en aristas individuales, y tienen aristas parcialmente paralelas que comparten partes de su camino.
  • puertos : los Bordes pueden tener su origen y punto final en un puerto específico (n, ne, e, se, s, sw, w, nw, w, c,_). Dependiendo de los puertos de borde, el borde cambia su forma (spline).
  • nodos invisibles : Puede haber casos en los que la introducción de nodos invisibles a los bordes de ruta puede tener el efecto deseado.
 25
Author: marapet,
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-01-12 16:53:04

Otro enfoque es agregar una propiedad overlap al gráfico. Las propiedades permitidas son scale (que aumentará enormemente el tamaño de la salida) o false (que no aumentará tanto el tamaño, pero probablemente causará que los bordes se superpongan con los nodos).

overlap = scale;

Si está utilizando overlap = false, puede deshacerse de las superposiciones de bordes con nodos agregando el atributo splines=true:

overlap = false;
splines = true;

Esto ralentizará notablemente el tiempo de generación para gráficos grandes.

 15
Author: Joel Rein,
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-19 19:09:23

Incluso para un gráfico bastante trivial veo graphviz (neato, fdp) para generar solapamientos. Por ejemplo:

graph G {
0;
1;
2;
3;
0--1 ;
1--2 ;
2--3 ;
3--0 ;
}

Produce una cruz en mi versión del código 2.38.0. De la documentación recomiendan probar con diferentes semillas aleatorias. Por ejemplo esto funcionó para mí:

neato -Gstart=5 file.dot -Tps -o file.ps
 8
Author: alfC,
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-07-03 23:18:04