Mostra le etichette in linea con il bordo quando usi Graphviz


91

Sto usando Graphviz 2.30. Il posizionamento orizzontale per le etichette funziona, ma in alcuni casi si potrebbe desiderare un angolo modificato.

Ad esempio, ho provato vari valori per l'angolo qui ma senza alcun effetto:

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

Come posso visualizzare le etichette in linea con (cioè parallela a) il bordo quando uso un Graphviz digraph.

L'intero digraphnon verrà pubblicato a causa di un NDA. Inoltre, la rotazione verrà applicata solo a poche etichette.

Ho letto discussioni simili come questa o un'altra (o una discussione sull'allineamento per esempio) ma senza alcun aiuto per quanto riguarda il mio problema.


2
'labelangle' funziona solo con headlabels e taillabels, inoltre non ruota l'etichetta, ma si limita a definire (insieme a labeldistance) dove posizionare l'etichetta (che è pur sempre una linea orizzontale). L'angolo 0 va dal punto iniziale / finale lungo il bordo. Con l'angolo + / - le etichette possono essere stampate sopra o sotto il bordo. Con distanza 0 l'angolo è senza effetto. Sarei anche molto interessato a far ruotare le etichette per seguire i bordi, cosa che è ancora irrisolta.
bug313

1
Ho la sensazione che non ci sia modo per farlo. Ma poiché l'assenza di funzionalità è raramente documentata (porterebbe a una quantità infinita di documentazione), è difficile scrivere una risposta autorevole su questo. A meno che tu non possa sottolineare che non c'è alcuna menzione di qualcosa di simile nell'intera documentazione, né in alcun angolo oscuro della base di codice.
bigblind

1
Gli elementi di testo in Graphviz sono tutti delimitati da una casella regolare durante il posizionamento. L'algoritmo si sforza davvero di evitare di oltrepassare questi limiti durante il posizionamento dei bordi. Se un'etichetta potesse essere ruotata, queste scatole diventerebbero molto più grandi con conseguente pressione sostanziale sull'area di visualizzazione. Se le etichette possono sovrapporsi ai bordi o ai nodi, potrebbero essere ruotate successivamente nella pipeline di imaging.
Pekka

1
in realtà lo puoi trovare nella documentazione: github.com/ellson/graphviz/blob/master/doc/internal_todo.html "? - Consenti il ​​testo in un angolo"
MK.

Risposte:


5

L'utilizzo di dot2latex consente di specificare l' lblstyleattributo. Il valore di lblstyleviene utilizzato da PGF / TikZ nella generazione di pdf.

Si possono specificare etichette parallele in questo modo:

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

Per generare il pdf

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

Il risultato è

inserisci qui la descrizione dell'immagine


Sfortunatamente dovresti conoscere gli angoli di tutte le etichette quando generi il grafico; l'OP vorrebbe visualizzare le proprie etichette parallelamente al bordo, a qualunque angolo si trovi il bordo.
Galax

1
@Galax Grazie per il tuo commento. Ho corretto la risposta.
malbarbo

Ottima scoperta: è una caratteristica utile di dot, non l'avevo notato prima (o forse è nuova).
Galax

-1

Modifica: un'altra risposta ha trovato un'opzione che ora esiste per allineare il testo con i bordi.

L'opzione migliore potrebbe essere quella di esportare il grafico come SVGe utilizzare Illustratoro Inkscapeper ottimizzarlo. Questo è pratico solo quando si producono pochi grafici.

Devo spesso modificare l'output di Graphvize Gephi; però mi danno un buon punto di partenza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.