2013-05-17 5 views
90

Ich verwende Graphviz 2.30. Horizontale Positionierung für Etiketten funktioniert, aber in einigen Fällen wäre ein modifizierter Winkel wünschenswert.Zeigen Sie Etiketten an der Kante an, wenn Sie Graphviz verwenden

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

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

Wie kann ich Etiketten in Zeile Anzeige mit der Kante (d.h. parallel zu), wenn ein Graphviz digraph verwenden.

Die gesamte digraph wird aufgrund einer NDA nicht veröffentlicht. Außerdem wird die Rotation nur auf einige wenige Labels angewendet.

Ich habe ähnliche Themen wie this oder another (oder ein Thread über Ausrichtung zum Beispiel) gelesen, aber ohne Hilfe zu meinem Problem.

+2

'labelangle' funktioniert nur mit headlabels und taillabels Außerdem dreht es nicht das Etikett, sondern definiert nur (zusammen wi Etikettentfernung), wo das Etikett (das immer noch eine horizontale Linie ist) platziert wird. Der Winkel 0 geht vom Start-/Endpunkt entlang der Kante. Mit Winkel +/- können Etiketten über oder unter der Kante gedruckt werden. Bei Abstand 0 ist der Winkel ohne Wirkung. Ich wäre auch sehr daran interessiert, Etiketten gedreht zu haben, um den Kanten zu folgen, was afaik immer noch ungelöst ist. – bug313

+1

Ich habe das Gefühl, dass es einfach keine Möglichkeit gibt, dies zu tun. Aber da die Abwesenheit von Features selten dokumentiert ist (es würde zu einer unendlichen Menge an Dokumentation führen), ist es schwer, eine autoritative Antwort dazu zu schreiben. Es sei denn, Sie können darauf hinweisen, dass in der gesamten Dokumentation oder in irgendeiner obskuren Ecke der Codebasis nichts dergleichen erwähnt wird. – bigblind

+1

Textelemente in Graphviz werden während der Positionierung durch eine normale Box begrenzt. Der Algorithmus versucht wirklich sehr, die Überschreitung dieser Boxgrenzen während der Platzierung der Kanten zu vermeiden. Wenn ein Etikett gedreht werden könnte, würden diese Kästen viel größer werden, was zu einem beträchtlichen Druck auf die Anzeigefläche führen würde. Wenn die Beschriftungen Kanten oder Knoten überlappen können, könnten sie später in der Imaging-Pipeline gedreht werden. – Pekka

Antwort

0

Edit: eine andere Antwort gefunden eine Option, die jetzt existiert, um Text mit Kanten auszurichten.

Die beste Option besteht darin, das Diagramm als SVG zu exportieren und Illustrator oder Inkscape zur Feineinstellung zu verwenden. Dies ist nur praktisch, wenn Sie einige Grafiken erstellen.

Ich muss häufig die Ausgabe von Graphviz und Gephi zwicken; Sie geben mir jedoch einen guten Ausgangspunkt.

2

Mithilfe von dot2latex können Sie das Attribut lblstyle angeben. Der Wert lblstyle wird von PGF/TikZ in PDF-Generierung verwendet.

Man kann parallel Etiketten angeben wie folgt aus:

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

Um die pdf

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

Das Ergebnis zu erzeugen ist

enter image description here

+0

Leider müssten Sie die Winkel aller Beschriftungen beim Generieren des Diagramms kennen, das OP möchte seine Beschriftungen parallel zur Kante anzeigen, egal in welchem ​​Winkel die Kante ist. – Galax

+1

@Galax Thanks Ich habe die Antwort behoben. – malbarbo

+0

Toller Fund - das ist eine praktische Funktion von 'dot', ich habe es vorher nicht bemerkt (oder vielleicht ist es neu). – Galax