9 Stimmen

Graphviz: Wie dreht man einen Knoten (oder einen Untergraphen)?

Ich versuche, einen Knoten (oder einen Teilgraphen, der einen Knoten umschließt - je nachdem, was möglich/leichter ist) zu drehen, wie in diesem Bild gezeigt:

desired rotated node effect

( Beachten Sie, dass es für mich keine Rolle spielt, ob die "B"-Beschriftung gedreht ist - nur dass die 'verti-*' Texte im Datensatz [oder besser gesagt, der gesamte Datensatzknoten] werden wie gezeigt gedreht )

Am ehesten komme ich dem jedoch mit folgendem Beispiel nahe dot Code:

digraph graphname {
    node [fontname=Monospace, fontsize=14]; 
    subgraph clusterMasterBox {
        node [shape=record];
        l1 [label = "{ horiz-1 \r| \
 horiz-2 \r| \
 horiz-3 \r| \
 horiz-4 \r} \
"];
        subgraph clusterSubRotateBox {
            rotate=90;
            node [shape=record,rotate=90];
            l2 [label = "{ verti-1 \r| \
 verti-2 \r| \
 verti-3 \r| \
 verti-4 \r} \
"];     
            label="B";
        }
    label="A"
    }
}

Der einzige Grund, warum ich die subgraph clusterSubRotateBox (und der einzige Grund, warum sie innerhalb der clusterMasterBox ), weil ich gehofft hatte, ich könnte ihm eine Drehung zuweisen, aber anscheinend kann ich das nicht - denn der obige Code erzeugt dieses Bild:

gviz rotate actual

Meine Frage ist also - gibt es eine Möglichkeit, einen Datensatz-Knoten zu drehen; wenn nicht allein, dann vielleicht als Teil eines Untergraphen (oder eine andere Art von "Objekt")?

Vielen Dank im Voraus für alle Vorschläge,
¡Salud!

7voto

KRoy Punkte 1122

Wenn Sie ein einzelnes Objekt rotieren wollen Eintrag basierten Knoten dann rankdir wird funktionieren. Ich habe es für mein Diagramm ausprobiert,

digraph plugnoid {
    rankdir=LR;
    node[shape=Mrecord];
    plugnoid [label="swarm| {<load0> onLoad|<plugin0> Plugin|<quit0> onQuit}|{<run0>run|<rehash0>rehash}"];}

enter image description here

Das rankdir kann folgende Werte haben LR , RL y TB (Voreinstellung). Als ich das Rankdir auf TB änderte, änderte sich die Ausgabe,

enter image description here

Vielleicht möchten Sie sie an Ihrem Diagramm ausprobieren, um die gewünschten Ergebnisse zu erzielen. Ich habe diese Erfahrung gemacht, als ich Untergraf und ein anderes Rankdir eingestellt hatte, war das Ergebnis nicht so gut. Siehe bitte http://www.graphviz.org/doc/info/shapes.html#record für weitere Einzelheiten.

5voto

dsz Punkte 3890

Für einen einzelnen Knoten gibt es die orientation Attribut. Ich habe einfach

node[shape=hexagon, orientation=30]

Um ein Sechseck mit einer Spitze an der Spitze statt einer flachen Spitze herzustellen.

Leider scheint das bei 'Record'-Typen nicht zu funktionieren :-(

4voto

mwx Punkte 544

Sollte es ein Attribut "Rotation" für das Diagrammobjekt geben (siehe http://www.graphviz.org/doc/info/attrs.html#drotation ), aber es tat nichts in meinem Test. und, es würde nur für den gesamten Graphen (nicht Cluster/Subgraph) nach den docs gelten. Ich schätze, Sie würden zuerst den Subgraphen in Postscript rendern und ihn dann in den endgültigen Graphen als benutzerdefinierte Form für einen einzelnen Platzhalterknoten einfügen. Wenn Sie "Rotation" nicht dazu bringen können, sein Ding zu machen, hat Postscript sicherlich eine einfache Möglichkeit, eine Transformation (Rotation in diesem Fall) anzuwenden, wahrscheinlich so einfach wie das Voranstellen des generierten Codes mit einer Koordinatendefinition. tut mir leid für das Handwaving, aber ich habe keine Zeit, es jetzt zu versuchen.

0voto

sroush Punkte 2654

Graphviz unterstützt keine partielle Rotation - nur ganze Graphen oder Polygonknoten ( https://www.graphviz.org/docs/attrs/rotate/ y https://graphviz.org/docs/attrs/orientation/ ). Um Ihr Ziel zu erreichen, erstellen Sie ein separates Diagramm für jeden Knoten oder Cluster, den Sie drehen möchten, und verwenden Sie dot (oder die gewünschte Engine), um Bilder (png, svg usw.) zu erstellen. Bild Attribut ( https://graphviz.org/docs/attrs/image/ ).
Beachten Sie, dass Graphviz nur unterstützt rotieren=90 , während Sie -90 verlangen. Verwenden Sie ein anderes Bildbearbeitungsprogramm, um das Ergebnis um 180° zu drehen (meine Güte)
des vollständigen GraphenAlso:
rotatePart1a.gv

digraph graphname {
    node [fontname=Monospace, fontsize=14];

    subgraph clusterMasterBox {
      label="A"
      {rank=same  // keep on same rank

        l2 [shape=plain label="" image="rotatePart1b.png"]

        node [shape=record];
        l1 [label = "{ horiz-1 \r| \
 horiz-2 \r| \
 horiz-3 \r| \
 horiz-4 \r} \
"];

    }
    }
}

rotatePart1b.gv

digraph graphname {
    rotate=90;
    node [fontname=Monospace, fontsize=14]; 

        subgraph clusterSubRotateBox {

            node [shape=record]  // rotation at node-level is silently ignored
            l2 [label = "{ verti-1 \r| \
 verti-2 \r| \
 verti-3 \r| \
 verti-4 \r} \
"];     
            label="B";
        }
}

Schenken:
enter image description here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X