Erzwinge graphviz, Knotenpositionen zu erhalten

8

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.

    
Remo 27.05.2013, 15:00
quelle

1 Antwort

14

Graphviz macht es nicht einfach, noes in der gleichen Position zu halten:

  • Das Hinzufügen / Entfernen eines Knotens kann ein völlig anderes Layout verursachen.
  • Das Hinzufügen / Entfernen eines Knotens kann die Dimension der zu ändernden Begrenzungsbox ändern.

Wenn alle Knoten beim Erstellen der Diagramme bekannt sind, funktioniert Folgendes:

  • Erstellen Sie ein Diagramm, das alle möglichen Knoten enthält, und lassen Sie es von graphviz erstellen. Sie können 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:

  • Erstellen Sie für jedes Diagramm eine Kopie von 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):

    %Vor%

Beispiel:

input.gv:

%Vor%

input.pos.modified.gv:

%Vor%

input.png ohne Änderungen:

versteckte Knoten:

    
marapet 27.05.2013, 20:34
quelle

Tags und Links