2010-10-19 10 views
31

Ho un grafico che ho creato in graphviz, ma il problema è che i bordi si sovrappongono l'un l'altro (ho 5-7 nodi in ogni riga), quindi è difficile indica per ogni nodo che sono i nodi che collega.Come evitare che i bordi di graphviz si sovrappongano

Come posso evitare che i bordi si sovrappongano l'un l'altro? Farci incrociare è OK.

risposta

21

Suppongo che tu disponga di un grafico orientato con layout.

Non penso che ci sia un interruttore magico per evitare i bordi sovrapposti. Graphviz prova a farlo fuori dalla scatola.

Alcuni suggerimenti che possono aiutare, a seconda del grafico:

  • bordo concentratori (concentrato = true): Unire più spigoli con un endpoint comune in bordi singoli, e hanno parzialmente parallele parti bordi azioni di il loro percorso.
  • porte: I bordi possono avere la loro origine e il punto finale su una porta specifica (n, ne, e, se, s, sw, w, nw, w, c, _). A seconda delle porte del bordo, il bordo cambia forma (spline).
  • nodi invisibili: possono esserci casi in cui l'introduzione di nodi invisibili per instradare i bordi può avere l'effetto desiderato.
+0

Come impostare l'attributo di porte? – dnivog

+0

@dnivog Semplicemente aggiungendo un ':' seguito dalla porta al nodo id (vedi anche https://graphviz.gitlab.io/_pages/doc/info/lang.html), ad esempio 'node1: ne -> node2: nw' – marapet

14

Un altro approccio consiste nell'aggiungere una proprietà di sovrapposizione al grafico. Le proprietà ammissibili sono la scala (che aumenterà enormemente la dimensione dell'output) o false (che non aumenterà di molto le dimensioni, ma probabilmente causerà la sovrapposizione dei nodi ai bordi).

overlap = scale; 

Se stai usando sovrapposizione = false, si può sbarazzarsi di bordo si sovrappone con i nodi aggiungendo l'attributo splines=true:

overlap = false; 
splines = true; 

questo rallenterà il tempo di generazione notevolmente per i grandi grafici.

+1

Dove aggiungo queste proprietà al grafico? Li inserisco nel corpo del grafico e non risulta alcun cambiamento. –

+4

Aggiunta di 'graph [overlap = false, splines = true];' non aiuta nemmeno i miei bordi sovrapposti. –

+3

spline +1 = true; – mnemonic

2

Anche per un grafico piuttosto banale, vedere graphviz (neato, fdp) per generare sovrapposizioni. Per esempio:

graph G { 
0; 
1; 
2; 
3; 
0--1 ; 
1--2 ; 
2--3 ; 
3--0 ; 
} 

Produce una croce nella mia versione del codice 2.38.0. Dalla documentazione http://www.graphviz.org/content/FaqNeatoEdgeCrossings si consiglia di provare con diversi semi casuali. Ad esempio, questo ha funzionato per me:

neato -Gstart=5 file.dot -Tps -o file.ps 
Problemi correlati