Exibir rótulos alinhados com a borda ao usar o Graphviz

91

Estou usando o Graphviz 2.30. O posicionamento horizontal para rótulos funciona, mas em alguns casos, um ângulo modificado seria desejado.

Por exemplo, tentei vários valores para o ângulo aqui, mas sem nenhum efeito:

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

Como posso exibir rótulos alinhados (ou seja, paralelos) à borda ao usar um Graphviz digraph.

O todo digraphnão será publicado devido a um NDA. Além disso, a rotação será aplicada apenas a alguns rótulos.

Eu li tópicos semelhantes como este ou outro (ou um tópico sobre alinhamento, por exemplo), mas sem qualquer ajuda em relação ao meu problema.

mnemônico
fonte
2
'labelangle' só funciona com headlabels e taillabels, além disso não gira o rótulo, mas apenas define (junto com labeldistance) onde colocar o rótulo (que ainda é uma linha horizontal). O ângulo 0 vai do ponto inicial / final ao longo da aresta. Com ângulo +/-, as etiquetas podem ser impressas acima ou abaixo da borda. Com a distância 0, o ângulo não tem efeito. Eu também estaria muito interessado em girar os rótulos para seguir as bordas, o que ainda não foi resolvido.
bug313
1
Estou tendo a sensação de que não há maneira de fazer isso. Mas como a ausência de recursos raramente é documentada (isso levaria a uma quantidade infinita de documentação), é difícil escrever uma resposta confiável sobre isso. A menos que você possa apontar que não há menção a nada parecido em toda a documentação, nem em qualquer canto obscuro da base de código.
bigblind
1
Os elementos de texto no Graphviz são todos delimitados por uma caixa regular durante o posicionamento. O algoritmo tenta realmente evitar cruzar os limites da caixa durante a colocação da borda. Se uma etiqueta pudesse ser girada, essas caixas se tornariam muito maiores, resultando em uma pressão substancial na área de exibição. Se os rótulos puderem se sobrepor a bordas ou nós, eles podem ser girados posteriormente no pipeline de imagem.
Pekka,
1
na verdade, você pode encontrá-lo na documentação: github.com/ellson/graphviz/blob/master/doc/internal_todo.html "? - Permitir texto em ângulo"
MK.

Respostas:

5

Usar dot2latex permite que você especifique o lblstyleatributo. O valor de lblstyleé usado por PGF / TikZ na geração de pdf.

É possível especificar rótulos paralelos como este:

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

Para gerar o pdf

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

O resultado é

insira a descrição da imagem aqui

Malbarbo
fonte
Infelizmente, você teria que saber os ângulos de todos os rótulos ao gerar o gráfico; o OP gostaria de exibir seus rótulos paralelos à aresta, em qualquer ângulo em que a aresta esteja.
Galax
1
@Galax Obrigado pelo seu comentário. Eu consertei a resposta.
malbarbo
Ótimo achado - esse é um recurso útil do dot, eu não percebi antes (ou talvez seja novo).
Galax
-1

Editar: outra resposta encontrou uma opção que agora existe para alinhar o texto com as bordas.

Sua melhor opção pode ser exportar o gráfico como um SVGe usá -lo Illustratorou Inkscapeajustá-lo. Isso só é prático ao produzir alguns gráficos.

Freqüentemente, preciso ajustar a saída de Graphvize Gephi; eles me dão um bom ponto de partida.

Galax
fonte