2012-11-12 15 views
9

Ich habe seit einiger Zeit damit zu kämpfen und kann keine klare Antwort finden. Ich arbeite mit zusammengesetzten Untergraphen in graphviz und finde nicht die richtige Kombination von Einstellungen, um zu erzwingen, dass sich zwei Untergraphen miteinander ausrichten.Wie bekomme ich Graphviz, um Subgraphen fester Größe zu generieren?

Anbei ist ein einfaches Beispiel, das Problem zu zeigen ...

digraph g { 
    compound=true; 

    subgraph cluster_top { 
    graph [color=black, label="Top", rank=min]; 

    nodeA; nodeB; nodeC 
    cluster_top_DUMMY [shape=point style=invis] 
    } 

    subgraph cluster_service { 
    graph [color=black, label="Bottom", rank=min]; 
    node1; node2; node3; node4; node5; extra_long_node 
    cluster_bottom_DUMMY [shape=point style=invis] 
    } 
    cluster_top_DUMMY -> cluster_bottom_DUMMY [ style=invis ] 
} 

Dies erzeugt Ausgabe mit dem Bottom Subgraphen deutlich breiter als die Top Subgraphen.

enter image description here

Was ich wirklich will, ist, dass, um sicherzustellen, oben und unten sind immer genau die gleiche Breite. Wenn es zu viele Knoten gibt, die in die verfügbare Breite passen, würde dies zusätzliche Zeilen von Knoten erzeugen.

Antwort

2

Eine mögliche (schlechte aber funktionierende) Lösung wäre, unsichtbare Knoten zu verwenden und die Breite festzulegen. Beachten Sie Folgendes:

digraph g { 
    compound=true; 

    subgraph cluster_top { 
     graph [color=black, label="Top", rank=min]; 

     nodeAI0 [style=invisible] 
     nodeAI1 [style=invisible] 
     nodeAI2 [style=invisible,fixedsize=true,width=1.65] 
     nodeA; nodeB; nodeC 
     cluster_top_DUMMY [shape=point style=invis] 
    } 

    subgraph cluster_service { 
     graph [color=black, label="Bottom", rank=min]; 
     node1; node2; node3; node4; node5; extra_long_node 
     cluster_bottom_DUMMY [shape=point style=invis] 
    } 
    cluster_top_DUMMY -> cluster_bottom_DUMMY [ style=invis ] 
} 

enter image description here

Die unsichtbaren Knoten (NodeAI0-NodeAI2), um den Platz in Anspruch nehmen. fixedsize = true, width = 1.65 macht den letzten genau 1,65 Zoll.

Eine andere wäre bessere Lösung auch den entsprechenden längeren Knoten auf speziell (zur Vermeidung von für den richtigen Wert zu suchen hat) durch, wie etwas hinzufügen:

node [fixedsize=true,width=0.75] 

nach der Verbindung = true Teil.

Verwandte Themen