2013-08-29 22 views

risposta

17

Come hai scoperto, graphviz non ti permette di scegliere il posizionamento delle etichette orizzontali, quindi tutte le soluzioni sono leggermente hacky.

Tentativo # 1: Le due soluzioni postato da marapet (here)

  1. Il labelangle e labeldistance trucco non adattarsi bene ai diverse lunghezze di testo dell'etichetta (che avrebbe dovuto ricalcolare nuovi numeri di distanza/angolo ).

  2. La spline = false trucco non funziona così bene in cui il numero di bordi tra i nodi> il numero di nodi (si finisce con bordi sovrapposti).

Tentativo # 2: xlabels e ancoraggi per creare bordi curvi

Questo utilizza una relativamente nuova caratteristica di graphviz, xlabel (che pone sull'etichetta dopo le coordinate per i nodi/bordi sono stati decisi). La funzione ports viene utilizzata per creare bordi curvi. L'imbottitura sulle etichette si ottiene con caratteri spaziali.

gv

digraph { 
forcelabels=true; 

    0:sw -> 1:nw [ dir=forward, xlabel=" (1, 0) "]; 
    0 -> 1 [dir=none]; 
    1:ne -> 0:se [ dir=backward, xlabel= " (0, -1) "]; 

} 

Credo che hai bisogno versione graphviz> 2.29 da usare xlabel.

+0

Nella mia versione di punto (2,40) non sembra più possibile utilizzare spazi per controllare la posizione dell'etichetta. – Nathaniel

+0

@Nathaniel, nel caso in cui aiuti a cercare di aggiungere/aggiungere un carattere quasi invisibile, come il punto ('.') o qualcos'altro nella tabella Unicode. Questo potrebbe quindi essere registrato come un carattere che il motore di layout utilizzerà, compresi i tuoi spazi: 'xlabel =". Mytext "' or 'xlabel =" mytext. "'. – xanderiel