Afficher les étiquettes en ligne avec le bord lors de l'utilisation de Graphviz

91

J'utilise Graphviz 2.30. Le positionnement horizontal des étiquettes fonctionne, mais dans quelques cas, un angle modifié serait souhaité.

Par exemple, j'ai essayé différentes valeurs pour l'angle ici mais sans aucun effet:

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

Comment puis-je afficher les étiquettes en ligne avec (c'est-à-dire parallèlement à) le bord lors de l'utilisation d'un Graphviz digraph.

Le tout digraphne sera pas publié en raison d'une NDA. De plus, la rotation ne sera appliquée qu'à quelques étiquettes.

J'ai lu des fils similaires comme celui-ci ou un autre (ou un fil sur l'alignement par exemple) mais sans aucune aide concernant mon problème.

mnémonique
la source
2
'étiquetteangle' ne fonctionne qu'avec les étiquettes de tête et les étiquettes arrière, en outre, il ne fait pas pivoter l'étiquette, mais définit uniquement (avec la distance d'étiquette) où placer l'étiquette (qui est toujours une ligne horizontale). L'angle 0 part du point de départ / d'arrivée le long du bord. Avec l'angle + / -, les étiquettes peuvent être imprimées au-dessus ou en dessous du bord. Avec la distance 0, l'angle est sans effet. Je serais également très intéressé par la rotation des étiquettes pour suivre les bords, ce qui n'est toujours pas résolu.
bug313
1
J'ai le sentiment qu'il n'y a aucun moyen de faire ça. Mais comme l'absence de fonctionnalités est rarement documentée (cela conduirait à une quantité infinie de documentation), il est difficile d'écrire une réponse faisant autorité à ce sujet. Sauf si vous pouvez souligner qu'il n'y a aucune mention de quelque chose comme ça dans toute la documentation, ni dans aucun coin obscur de la base de code.
bigblind
1
Les éléments de texte dans Graphviz sont tous délimités par une boîte régulière lors du positionnement. L'algorithme essaie vraiment d'éviter de traverser ces limites de boîte lors du placement des bords. Si une étiquette pouvait être tournée, ces boîtes deviendraient beaucoup plus grandes, entraînant une pression substantielle sur la zone d'affichage. Si les étiquettes peuvent chevaucher des bords ou des nœuds, elles peuvent être pivotées plus tard dans le pipeline d'imagerie.
Pekka
1
en fait, vous pouvez le trouver dans la documentation: github.com/ellson/graphviz/blob/master/doc/internal_todo.html "? - Autoriser le texte à un angle"
MK.

Réponses:

5

L'utilisation de dot2latex vous permet de spécifier un lblstyleattribut. La valeur de lblstyleest utilisée par PGF / TikZ dans la génération PDF.

On peut spécifier des étiquettes parallèles comme ceci:

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

Pour générer le pdf

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

Le résultat est

entrez la description de l'image ici

malbarbo
la source
Malheureusement, vous devrez connaître les angles de toutes les étiquettes lors de la génération du graphique; l'OP souhaite afficher ses étiquettes parallèlement au bord, quel que soit l'angle du bord.
Galax du
1
@Galax Merci pour votre commentaire. J'ai corrigé la réponse.
malbarbo du
Excellente trouvaille - c'est une fonctionnalité pratique de dot, je ne l'ai pas remarqué avant (ou peut-être que c'est nouveau).
Galax du
-1

Modifier: une autre réponse a trouvé une option qui existe maintenant pour aligner le texte avec les bords.

Votre meilleure option peut être d'exporter le graphique en tant que SVGet de l'utiliser Illustratorou Inkscapede le peaufiner. Ceci n'est pratique que lors de la production de quelques graphiques.

Je dois souvent modifier la sortie de Graphvizet Gephi; ils me donnent cependant un bon point de départ.

Galax
la source