Zeigen Sie bei Verwendung von Graphviz Beschriftungen an der Kante an

91

Ich benutze Graphviz 2.30. Die horizontale Positionierung für Etiketten funktioniert, in einigen Fällen wäre jedoch ein modifizierter Winkel erwünscht.

Zum Beispiel habe ich hier verschiedene Werte für den Winkel ausprobiert, aber ohne Wirkung:

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

Wie kann ich die Etiketten in Übereinstimmung mit (dh parallel zu) , wenn der Kante eines Graphviz Verwendung digraph.

Das Ganze digraphwird aufgrund einer NDA nicht gebucht. Außerdem wird die Drehung nur auf wenige Etiketten angewendet.

Ich habe ähnliche Threads wie diesen oder einen anderen gelesen (oder einen Thread zum Beispiel über Ausrichtung), aber ohne Hilfe in Bezug auf mein Problem.

Mnemonik
quelle
2
'labelangle' funktioniert nur mit Headlabels und Taillabels. Außerdem dreht es das Label nicht, sondern definiert nur (zusammen mit dem Labeldistanz), wo das Label platziert werden soll (was immer noch eine horizontale Linie ist). Der Winkel 0 verläuft vom Start- / Endpunkt entlang der Kante. Mit Winkel + / - können Etiketten über oder unter der Kante gedruckt werden. Bei Abstand 0 ist der Winkel wirkungslos. Ich wäre auch sehr daran interessiert, Etiketten drehen zu lassen, um den Kanten zu folgen, was afaik noch ungelöst ist.
Bug313
1
Ich habe das Gefühl, dass es einfach keine Möglichkeit gibt, dies zu tun. Da das Fehlen von Funktionen jedoch selten dokumentiert wird (dies würde zu einer unendlichen Menge an Dokumentation führen), ist es schwierig, eine maßgebliche Antwort darauf zu schreiben. Es sei denn, Sie können darauf hinweisen, dass in der gesamten Dokumentation oder in einer dunklen Ecke der Codebasis nichts dergleichen erwähnt wird.
Bigblind
1
Textelemente in Graphviz werden beim Positionieren alle mit einem regulären Feld begrenzt. Der Algorithmus ist sehr bemüht, das Überschreiten dieser Boxgrenzen während der Kantenplatzierung zu vermeiden. Wenn ein Etikett gedreht werden könnte, würden diese Kästchen viel größer, was zu einem erheblichen Druck auf den Anzeigebereich führen würde. Wenn die Beschriftungen Kanten oder Knoten überlappen können, können sie später in der Imaging-Pipeline gedreht werden.
Pekka
1
Tatsächlich finden Sie es in der Dokumentation: github.com/ellson/graphviz/blob/master/doc/internal_todo.html "? - Text in einem Winkel zulassen"
MK.

Antworten:

4

Mit dot2latex können Sie lblstyleAttribute angeben . Der Wert von lblstylewird von PGF / TikZ bei der PDF-Generierung verwendet.

Man kann parallele Beschriftungen wie folgt angeben:

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

Um das PDF zu generieren

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

Das Ergebnis ist

Geben Sie hier die Bildbeschreibung ein

Malbarbo
quelle
Leider müssten Sie beim Generieren des Diagramms die Winkel aller Beschriftungen kennen. Das OP möchte seine Beschriftungen parallel zur Kante anzeigen, unabhängig davon, in welchem ​​Winkel sich die Kante befindet.
Galax
1
@Galax Danke für deinen Kommentar. Ich habe die Antwort korrigiert.
Malbarbo
Toller Fund - das ist eine praktische Funktion von dot, ich habe es vorher nicht bemerkt (oder vielleicht ist es neu).
Galax
-1

Bearbeiten: Eine andere Antwort hat eine Option gefunden, die jetzt vorhanden ist, um Text an Kanten auszurichten.

Am besten exportieren Sie das Diagramm als SVGund verwenden Illustratoroder Inkscapeoptimieren. Dies ist nur praktisch, wenn einige Diagramme erstellt werden.

Ich muss häufig die Ausgabe von Graphvizund optimieren Gephi; Sie geben mir aber einen guten Ausgangspunkt.

Galax
quelle