J'utilise graphviz (point) pour générer le graphique que vous pouvez voir ci-dessous. Le nœud dans le coin inférieur gauche (ellipse rouge) cause de la gêne car ses bords traversent plusieurs bords du nœud adjacent. Existe-t-il un moyen de restreindre le placement des nœuds dans une certaine zone?
Je ne connais aucun moyen de contrôler l'emplacement des nœuds individuels. Cela n'a pas vraiment de sens, car pour ce faire, vous devez savoir à quoi ressemblera le graphique final, mais placer un nœud manuellement changerait alors la façon dont le reste du graphique est rendu.
J'ai résolu ce problème en modifiant l'ordre dans lequel mes nœuds sont définis dans le .dot
fichier et peaufiner les attributs nodesep
et ranksep
au niveau du graphique. C'est un processus de raffinement - peaufiner quelques éléments à la fois jusqu'à ce que cela semble correct.
Vous pouvez également rendre le graphique sous la forme SVG
, puis l'importer dans Visio (ou un autre éditeur) et réorganiser manuellement les nœuds dont vous n'êtes pas satisfait.
Vous pouvez créer une contrainte invisible pour faire apparaître le nœud rouge à gauche de tous les autres nœuds.
redNode -> leftmostNode [style=invis];
Avant:
Après:
@Jannis, au cas où vous seriez toujours intéressé par une réponse à cela, il y a en fait un moyen de contrôler le placement des nœuds individuels - vous utilisez le "pos "attribut:
http://www.graphviz.org/doc/info/attrs.html#d:pos
À titre d'exemple, vous pouvez écrire:
n [pos="3,5!"];
Cela forcerait le noeud n
à être précisément (3,5)
.
Cependant, cela ne fonctionne qu'avec les moteurs de mise en page "fdp" et "neato".
J'aime @smokris '[style=invis]
astuce pour persuader graphviz de mettre les choses où vous le souhaitez, en ajoutant des bords qui affectent la mise en page mais ne sont pas visibles.
Une autre astuce est l'attribut constraint
, qui vous permet d'ajouter des bords qui sont visibles mais n'affectent pas la disposition.
Si l'ajout d'un nouveau bord gâche votre graphique, définissez [constraint=false]
sur cet Edge: maintenant graphviz l'ignorera lors du placement des nœuds. ????
Si
false
, Edge n'est pas utilisé pour classer les nœuds. Par exemple, dans le graphiquedigraph G { a -> c; a -> b; b -> c [constraint=false]; }
le bord
b -> c
n'ajoute pas de contrainte lors de l'attribution du rang, donc les seules contraintes sont que a soit au-dessus de b et c, ce qui donne le graphique: