Mostrar etiquetas en línea con el borde cuando se usa Graphviz

91

Estoy usando Graphviz 2.30. El posicionamiento horizontal de las etiquetas funciona, pero en algunos casos, sería deseable un ángulo modificado.

Por ejemplo, probé varios valores para el ángulo aquí pero sin ningún efecto:

ABB -> ABACUS[label="applied", fontname="Arial", fontsize=15, labelangle=110];

¿Cómo puedo mostrar etiquetas en línea con (es decir, paralelas a) el borde cuando utilizo Graphviz digraph?

La totalidad digraphno se publicará debido a un NDA. Además, la rotación se aplicará solo a algunas etiquetas.

He leído hilos similares como este u otro (o un hilo sobre alineación, por ejemplo) pero sin ninguna ayuda con respecto a mi problema.

mnemotécnico
fuente
2
'labelangle' solo funciona con headlabels y taillabels, además no gira la etiqueta, sino que solo define (junto con labeldistance) dónde colocar la etiqueta (que sigue siendo una línea horizontal). El ángulo 0 va desde el punto inicial / final a lo largo del borde. Con ángulo + / - las etiquetas se pueden imprimir por encima o por debajo del borde. Con la distancia 0, el ángulo no tiene efecto. También estaría muy interesado en rotar las etiquetas para seguir los bordes, lo que afaik aún no está resuelto.
bug313
1
Tengo la sensación de que no hay forma de hacer esto. Pero dado que la ausencia de características rara vez se documenta (daría lugar a una cantidad infinita de documentación), es difícil escribir una respuesta autorizada sobre esto. A menos que pueda señalar que no se menciona nada como esto en toda la documentación, ni en ningún rincón oscuro del código base.
bigblind
1
Los elementos de texto en Graphviz están todos delimitados con un cuadro regular durante el posicionamiento. El algoritmo se esfuerza mucho por evitar cruzar estos límites de caja durante la colocación del borde. Si se pudiera girar una etiqueta, estas cajas se volverían mucho más grandes, lo que provocaría una presión sustancial en el área de visualización. Si las etiquetas pueden superponerse a bordes o nodos, entonces podrían rotarse más adelante en la canalización de imágenes.
Pekka
1
de hecho, puede encontrarlo en la documentación: github.com/ellson/graphviz/blob/master/doc/internal_todo.html "? - Permitir texto en ángulo"
MK.

Respuestas:

5

El uso de dot2latex le permite especificar un lblstyleatributo. PGF / TikZlblstyle utiliza el valor de en la generación de PDF.

Se pueden especificar etiquetas paralelas como esta:

digraph G {
    edge [lblstyle="above, sloped"];
    a -> b [label="ab"];
    b -> c [label="bc"];
    c -> a [label="ca"];
}

Para generar el pdf

$ dot2tex --tikzedgelabel file.dot > file.tex
$ pdflatex file.tex

El resultado es

ingrese la descripción de la imagen aquí

malbarbo
fuente
Desafortunadamente, tendría que conocer los ángulos de todas las etiquetas al generar el gráfico; al OP le gustaría mostrar sus etiquetas en paralelo con el borde, en cualquier ángulo en el que se encuentre el borde.
Galax
1
@Galax Gracias por tu comentario. Arreglé la respuesta.
malbarbo
Gran hallazgo: esa es una característica útil de dot, no lo noté antes (o tal vez sea nuevo).
Galax
-1

Editar: otra respuesta encontró una opción que ahora existe para alinear el texto con los bordes.

Su mejor opción puede ser exportar el gráfico como un SVGy utilizarlo Illustratoro Inkscapeajustarlo. Esto solo es práctico cuando se producen algunos gráficos.

Con frecuencia tengo que modificar la salida de Graphvizy Gephi; aunque me dan un buen punto de partida.

Galax
fuente