2010-10-19 9 views
31

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 de contar para cada nodo cuáles son los nodos que conecta.Cómo prevenir bordes en graphviz a superponerse entre sí

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

Respuesta

21

Estoy suponiendo que tiene un grafo dirigido que se diseño con punto.

No creo que hay un interruptor de magia para evitar que los bordes superpuestos. Graphviz intenta hacer eso de la caja.

Algunas sugerencias que pueden ayudar, en función de la gráfica:

  • concentradores de borde (concentrado = true): Combinar varios bordes con un punto final común en bordes individuales, y tienen partes bordes compartir parcialmente paralelas 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.
+0

¿Cómo establecer el atributo de puertos? – dnivog

+0

@dnivog Simplemente agregando un ':' seguido del puerto al ID del nodo (ver también https://graphviz.gitlab.io/_pages/doc/info/lang.html), por ejemplo 'node1: ne -> node2: nw' – marapet

14

Otro enfoque consiste en añadir una propiedad de superposición a la gráfica. Las propiedades permitidas son escala (lo que aumentará enormemente el tamaño de la salida) o falso (que no aumentará tanto el tamaño, pero probablemente hará que los bordes se superpongan).

overlap = scale; 

Si está utilizando solapamiento = falso, usted puede deshacerse de borde se superpone con nodos añadiendo el atributo splines=true:

overlap = false; 
splines = true; 

Esta vez se ralentizará notablemente la generación de grandes gráficos.

+1

¿Dónde agrego estas propiedades al gráfico? Los inserto en el cuerpo del gráfico y no produce ningún cambio. –

+4

Agregar 'graph [overlap = false, splines = true];' tampoco ayuda con mis bordes superpuestos. –

+3

+1 splines = true; – mnemonic

2

Incluso para gráficos bastante triviales veo graphviz (neato, fdp) para generar coincidencias. 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 http://www.graphviz.org/content/FaqNeatoEdgeCrossings recomiendan probar con diferentes semillas aleatorias. Por ejemplo, esto funcionó para mí:

neato -Gstart=5 file.dot -Tps -o file.ps 
Cuestiones relacionadas