Lenguaje de gráficos de puntos: ¿cómo hacer bordes bidireccionales automáticamente?

81

Aquí hay un ejemplo muy simplificado de mi gráfico de puntos:

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

Esto crea texto alternativo

En su lugar, quiero que se muestre un solo borde entre A y B pero con una punta de flecha doble. Sé cómo obtener la punta de flecha doble como opción global:

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

Pero eso se ve muy feo, y no todos mis bordes deberían ser de doble cabeza.

texto alternativo

Si proceso más el gráfico y detecto la referencia doble yo mismo y reemplazo los dos bordes con un solo borde, se ve bien. Pero prefiero no tener que hacer este paso adicional

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

texto alternativo

¿Alguna mejor solución?

I82Mucho
fuente

Respuestas:

65

¿Qué tal 'concentrarse = verdadero' ?:

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

con concentrado = verdadero

De la documentación :

Si es cierto, use concentradores de borde. Esto fusiona múltiples bordes en un solo borde y hace que los bordes parcialmente paralelos compartan parte de sus caminos. La última función aún no está disponible fuera de dot.

Spenthil
fuente
Funciona con una etiqueta para mí y estoy ejecutando una versión anterior.
Aaron Hall
1
Si ayuda ... esto no funcionó para mí, ya que unió los bordes, pero solo puso una flecha en el extremo. Luego intenté hacer un "dígrafo estricto" ... y entonces funciona perfectamente.
philw
Esto es una tontería, pero es lo que quería el OP, ¡tan grande!
Dan Rosenstark
@philw Tampoco me funciona, obtengo bordes con una sola punta de flecha. Estoy usando pygraphviz y lo intenté pgv.AGraph(directed=True, strict=True), pero tampoco funciona, obtengo dos bordes nuevamente ... ¿Alguna sugerencia?
Tropilio
101

Deberías usar:

A -> B [dir=both]
usuario2598811
fuente
4
Esto me ahorró algunas líneas redundantes, y lo estoy usando, así como la respuesta principal cuando corresponde.
Aaron Hall
2
No necesita comillas alrededor de "ambos"
Yetti99
@NoahSussman No puede ser la respuesta aceptada porque en realidad no responde a la pregunta;)
Dan Rosenstark