2010-08-11 13 views
55

Aquí es un ejemplo muy simplificado de mi gráfico de puntos:Lenguaje de gráfico de puntos: ¿cómo hacer bordes bidireccionales?

strict digraph graphName { 
A->B 
B->A 
} 

Esto crea alt text http://grab.by/grabs/a7a5a41268955d2a62b6aa2b8b131e03.png

lugar quiero una única arista que se muestra entre A y B, pero con una cabeza de flecha doble. Yo sé cómo conseguir la punta de flecha doble como una opción global:

strict digraph graphName { 
    edge [dir="both"] 
A->B 
B->A 
} 

Pero que se ve muy feo, y no todos mis bordes debería ser de cabezal doble.

alt text http://grab.by/grabs/c370bc807079b0e6c0e5f63d5624b211.png

Si hago más procesamiento del gráfico y detectar la doble referencia a mí mismo y vuelva a colocar los dos bordes con un solo borde, se ve bien. Pero prefiero no tengo que hacer este paso adicional

strict digraph graphName { 
A->B [dir="both"] 
} 

alt text http://grab.by/grabs/424d58700292a274eea833ff8956c696.png

alguna solución mejor?

Respuesta

47

¿Qué hay de 'concentrado = true' ?:

strict digraph graphName { 
concentrate=true 
A->B 
B->A 
} 

with concentrate=true http://i38.tinypic.com/290ugk6.png

Desde el documentation:

Si es verdad, utilizar concentradores de punta. Este fusiona multiedges en un único borde y provoca bordes parcialmente paralelos a compartir parte de sus rutas. La última característica aún no está disponible fuera de de punto.

+5

esto no funciona cuando el borde debería tener una etiqueta .. –

+0

Funciona con una etiqueta para mí, y estoy ejecutando una versión anterior. –

+1

Esto no parece funcionar para dot2.38 – Pacerier

53

sólo debe utilizar:

A -> B [dir = "ambos"]

+4

Esto me ha salvado algunas líneas redundantes, y lo estoy usando así como la respuesta superior cuando corresponda. –

+1

Esta debería ser la respuesta aceptada. –

Cuestiones relacionadas