Soweit ich weiß, dass dies erfordert ein wenig Arbeit herumführen; Ich werde es nur in Graphviz DOT Sprache machen. Ich gebe dir zuerst die Lösung und dann einige Erklärungen, wie du sie erweitern kannst.
Dies ist die resultierende Zahl:
Dies ist der Graphviz Code die Figur Herstellung:
graph atree {
Item1 [shape=none,label="Item 1",pos="2.2,1.1!"];
Item2 [shape=none,label="Item 2",pos="2.2,0.1!"];
Item3 [shape=none,label="Item 3",pos="2.9,-0.3!"];
A [shape=box,color=lightblue,style=filled,pos="2,3!"];
B [shape=box,color=lightblue,style=filled,pos="1,2.1!"];
C [shape=box,color=lightblue,style=filled,pos="3,2.1!"];
D [shape=box,color=lightblue,style=filled,pos="1.5,1.5!"];
E [shape=box,color=lightblue,style=filled,pos="1.5,0.5!"];
D0 [style=invisible,fixedsize=true,width=0,height=0,pos="2,2.5!",label=""];
D1 [style=invisible,fixedsize=true,width=0,height=0,pos="1,2.5!",label=""];
D2 [style=invisible,fixedsize=true,width=0,height=0,pos="3,2.5!",label=""];
D3 [style=invisible,fixedsize=true,width=0,height=0,pos="1,1.5!",label=""];
D4 [style=invisible,fixedsize=true,width=0,height=0,pos="1,0.5!",label=""];
D5 [style=invisible,fixedsize=true,width=0,height=0,pos="1.5,1.1!",label=""];
D6 [style=invisible,fixedsize=true,width=0,height=0,pos="1.5,0.1!",label=""];
D7 [style=invisible,fixedsize=true,width=0,height=0,pos="2.2,-0.3!",label=""];
A -- D0 -- D1 -- B -- D3 -- D4 -- E [color=blue];
E -- D6 -- Item2 -- D7 -- Item3 [color=blue];
D0 -- D2 -- C [color=blue];
D3 -- D -- D5 -- Item1 [color=blue];
}
Wenn Sie es in einer Datei mit dem Namen setzen inputfile.dot
Sie das resultierende Bild bekommen Datei mit dem Befehl neato -Tpng inputfile.dot > outfile.png
.
Jetzt ein paar Kommentare, wie es funktioniert: Der Code, der den Baum mit A, B, C, D, E, Item1, Item2, Item3
erstellt, ist unkompliziert (die Attribute legen nur die Farben und Boxstile fest). Der Trick, um die Linien gerade und orthogonal zu erhalten, besteht aus 1) Hinzufügen von unsichtbaren Knoten mit der Größe Null zu dem Graphen und 2) Positionieren aller Objekte in absoluten Koordinaten auf der Leinwand. Der Hilfsknoten D1, D2, D3, D4, D5, D6, D7
für Schritt 1) und die pos="x,y!"
Optionen benötigt werden, werden für den Schritt 2) benötigt wird. Beachten Sie, dass Sie das !
Zeichen am Ende des pos
Befehls benötigen, da sonst die Positionen nicht als endgültig angesehen werden würden und das Layout noch umziehen würde.
können Sie fügen zusätzliche Knoten, die durch erste Positioniereinrichtung einen neuen Knoten (durch den Code für den Knoten unter Verwendung von A ... Item3
als Vorlage), einen unsichtbaren, Hilfsknoten Addieren (mit pos
, so daß alle Verbindungen zu und von ihm orthogonal sind), und Fügen Sie dann die Verbindung zum Diagramm über <StartingNode> -- <AuxiliaryNode> -- <NewNode>
hinzu.
so sieht es aus wie mein Code den harten Teil in herauszufinden, die absolute Positionierung Zahlen zu tun haben! – thomas
Leider kenne ich keine Möglichkeit, Graphviz zu verwenden, das den Graphen mit orthogonalen (und aufteilenden) Verbindungen zwischen Knoten zeichnet! Wenn Sie dieses Verhalten nicht benötigen, übernimmt Graphviz die meiste Arbeit für Sie. Wenn Sie auf diesem Verhalten bestehen, müssen Sie einige manuelle Arbeit für das Layout tun. – user8472
danke. Ich brauche dieses Verhalten leider. Ich werde diese Logik codieren müssen. – thomas