2010-10-19 40 views
31

J'ai un graphique que j'ai créé dans graphviz, mais le problème est que les bords se chevauchent (j'ai 5-7 nœuds dans chaque rangée), il est donc difficile de dire à chaque nœud quels sont les nœuds qu'il connecte.Comment éviter que les bords de graphviz se chevauchent

Comment faire pour que les bords ne se chevauchent pas? Les faire se croiser est OK.

Répondre

21

Je suppose que vous avez un graphe orienté que vous mettez en page avec un point.

Je ne pense pas qu'il existe un interrupteur magique pour éviter les bords qui se chevauchent. Graphviz essaie de le faire hors de la boîte.

Quelques suggestions qui peuvent être utiles, en fonction du graphique:

  • bord concentrateurs (concentré = true): fusionner plusieurs bords avec un point d'extrémité commun à bords simples, et ont des bords partiellement parallèles parties d'actions de leur chemin.
  • ports: Les arêtes peuvent avoir leur origine et leur point de terminaison sur un port spécifique (n, ne, e, se, s, sw, w, nw, w, c, _). En fonction des ports de bord, le bord change de forme (spline).
  • Noeuds invisibles: Dans certains cas, l'introduction des noeuds invisibles pour router les arêtes peut avoir l'effet désiré.
+0

Comment définir l'attribut de ports? – dnivog

+0

@dnivog Simplement en ajoutant un ':' suivi du port à l'identifiant du noeud (voir aussi https://graphviz.gitlab.io/_pages/doc/info/lang.html), par exemple 'node1: ne -> node2: nw' – marapet

14

Une autre approche consiste à ajouter une propriété de recouvrement au graphique. Les propriétés admises sont l'échelle (qui augmentera considérablement la taille de la sortie) ou la valeur false (ce qui n'augmentera pas la taille autant, mais provoquera probablement le chevauchement des arêtes entre les arêtes).

overlap = scale; 

Si vous utilisez chevauchement = false, vous pouvez vous débarrasser de bord chevauche les nœuds en ajoutant l'attribut splines=true:

overlap = false; 
splines = true; 

Cela va ralentir le temps de génération sensiblement pour les grands graphiques.

+1

Où puis-je ajouter ces propriétés au graphique? Je les insère dans le corps du graphique et cela n'entraîne aucun changement. –

+4

L'ajout de 'graph [overlap = false, splines = true];' n'aide pas non plus mes bords qui se chevauchent. –

+3

+1 splines = true; – mnemonic

2

Même pour un graphique assez trivial, je vois graphviz (neato, fdp) pour générer des chevauchements. Par exemple:

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

produit une croix dans ma version du code 2.38.0. De la documentation http://www.graphviz.org/content/FaqNeatoEdgeCrossings ils recommandent d'essayer avec différentes graines aléatoires. Par exemple cela a fonctionné pour moi:

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