Ich habe ein Diagramm, das sich im Laufe der Zeit ändert (normalerweise werden neue Knoten hinzugefügt). Ich muss das Diagramm mehrmals regenerieren und möchte, dass alle Knoten dort bleiben, wo sie waren. Dies funktioniert teilweise, wenn graphviz mit dem fdp
-Algorithmus verwendet wird, das pin
-Flag gesetzt wird und die Positionen mit dem pos
-argument angegeben werden.
In den meisten Fällen funktioniert das ziemlich gut. Aber besonders wenn neue Knoten hinzugefügt werden, ändert sich das Layout manchmal drastisch - was ich vermeiden muss. Gibt es eine Option, diese fixierten Positionen tatsächlich zu erzwingen ? Es könnte zu einem hässlichen Diagramm führen, das wäre in Ordnung - aber sie müssen nur haften bleiben.
Graphviz macht es nicht einfach, noes in der gleichen Position zu halten:
Wenn alle Knoten beim Erstellen der Diagramme bekannt sind, funktioniert Folgendes:
nodes[pin=true];
am Anfang des Diagramms hinzufügen (dann müssen Sie es später nicht hinzufügen). Layout der Grafik:
%Vor%Sie haben jetzt eine Punktdatei, die alle Knoten enthält. Sie können dies als Basisdatei für alle zu erstellenden Graphen verwenden:
input.pos.gv
und blenden Sie die nicht benötigten Knoten und Kanten aus, indem Sie ihren Attributen style=invis
hinzufügen. Dadurch wird sichergestellt, dass sie nicht angezeigt werden, aber auch der Platz, den sie im Layout verwenden, wird nicht abgeschnitten entfernt (z. B. ganz oben im Diagramm). Legen Sie sie so aus ( neato
und Option -n2
sind die wichtigen Teile):
Beispiel:
input.gv:
%Vor%input.pos.modified.gv:
%Vor%input.png ohne Änderungen:
versteckte Knoten: