web-dev-qa-db-fra.com

Comment empêcher les bords de Graphviz de se chevaucher

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 ligne), il est donc difficile de dire pour chaque nœud quels sont les nœuds qu'il connecte.

Comment puis-je faire en sorte que les bords ne se chevauchent pas? Les faire se croiser c'est OK.

50
David Rabinowitz

Je suppose que vous avez un graphique dirigé que vous disposez avec un point.

Je ne pense pas qu'il y ait un interrupteur magique pour empêcher les bords qui se chevauchent. Graphviz essaie de le faire hors de la boîte.

Quelques suggestions qui peuvent aider, selon le graphique:

  • Concentrateurs d'arêtes (concentré = vrai): fusionnez plusieurs arêtes avec un point d'extrémité commun en arêtes uniques, et les arêtes partiellement parallèles partagent des parties de leur chemin.
  • ports: les bords 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 Edge, l'Edge change de forme (spline).
  • nœuds invisibles: Il peut y avoir des cas où l'introduction de nœuds invisibles pour router les bords peut avoir l'effet souhaité.
31
marapet

Une autre approche consiste à ajouter une propriété de chevauchement au graphique. Les propriétés autorisées sont l'échelle (qui augmentera considérablement la taille de la sortie) ou false (qui n'augmentera pas autant la taille, mais provoquera probablement le chevauchement des bords des nœuds).

overlap = scale;

Si vous utilisez overlap = false, vous pouvez vous débarrasser des chevauchements Edge avec les nœuds en ajoutant l'attribut splines=true:

overlap = false;
splines = true;

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

14
Joel Rein

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 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
8
alfC