Wyświetlaj etykiety wzdłuż krawędzi podczas korzystania z Graphviz

91

Używam Graphviz 2.30. Poziome pozycjonowanie etykiet działa, ale w kilku przypadkach pożądany byłby zmodyfikowany kąt.

Na przykład wypróbowałem tutaj różne wartości kąta, ale bez żadnego efektu:

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

Jak mogę wyświetlać etykiety wzdłuż krawędzi (tj. Równolegle do niej) podczas korzystania z Graphviz digraph.

Całość digraphnie zostanie opublikowana z powodu NDA. Ponadto rotacja zostanie zastosowana tylko do kilku etykiet.

Czytałem podobne wątki, takie jak ten lub inny (lub na przykład wątek o wyrównaniu), ale bez żadnej pomocy w związku z moim problemem.

mnemoniczny
źródło
2
„labelangle” działa tylko z nagłówkami i końcowymi etykietami, ponadto nie obraca etykiety, a jedynie określa (wraz z odległością etykiety), gdzie umieścić etykietę (która nadal jest linią poziomą). Kąt 0 biegnie od punktu początkowego / końcowego wzdłuż krawędzi. Dzięki kątowi + / - etykiety mogą być drukowane powyżej lub poniżej krawędzi. Przy odległości 0 kąt nie ma znaczenia. Byłbym również bardzo zainteresowany obracaniem etykiet, aby podążały za krawędziami, co nadal pozostaje nierozwiązane.
bug313,
1
Mam wrażenie, że po prostu nie da się tego zrobić. Ale ponieważ brak funkcji jest rzadko dokumentowany (prowadziłby do nieskończonej ilości dokumentacji), trudno jest napisać miarodajną odpowiedź na ten temat. Chyba że możesz wskazać, że nie ma wzmianki o czymś takim w całej dokumentacji ani w żadnym niejasnym zakątku bazy kodu.
bigblind
1
Podczas pozycjonowania wszystkie elementy tekstowe w Graphviz są ograniczane zwykłym prostokątem. Algorytm bardzo się stara, aby uniknąć przekroczenia tych granic pola podczas umieszczania krawędzi. Gdyby można było obrócić etykietę, pudełka te stałyby się znacznie większe, co spowodowałoby znaczny nacisk na obszar wyświetlania. Jeśli etykiety mogą zachodzić na krawędzie lub węzły, można je później obrócić w potoku obrazowania.
Pekka
1
właściwie możesz to znaleźć w dokumentacji: github.com/ellson/graphviz/blob/master/doc/internal_todo.html "? - Dopuszczaj tekst pod kątem"
MK.

Odpowiedzi:

6

Użycie dot2latex umożliwia określenie lblstyleatrybutu. Wartość lblstylejest używana przez PGF / TikZ w generowaniu pdf.

Można określić równoległe etykiety w następujący sposób:

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

Aby wygenerować plik PDF

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

Wynik to

wprowadź opis obrazu tutaj

malbarbo
źródło
Niestety, podczas generowania wykresu musiałbyś znać kąty wszystkich etykiet; OP chciałby wyświetlać swoje etykiety równolegle do krawędzi, pod jakimkolwiek kątem się ona znajduje.
Galax,
1
@Galax Dzięki za komentarz. Poprawiłem odpowiedź.
malbarbo,
Świetne znalezisko - to przydatna funkcja dot, wcześniej tego nie zauważyłem (a może jest nowa).
Galax,
-1

Edycja: inna odpowiedź znalazła opcję, która teraz istnieje, aby wyrównać tekst z krawędziami.

Najlepszym rozwiązaniem może być wyeksportowanie wykresu jako pliku SVGi użycie go Illustratorlub Inkscapedostrojenie. Jest to praktyczne tylko przy tworzeniu kilku wykresów.

Często muszę dostosowywać dane wyjściowe z Graphvizi Gephi; dają mi jednak dobry punkt wyjścia.

Galax
źródło