2011-09-23 2 views
5

Utilizzando rubino graphviz, ho creato un grafico che assomiglia a questo (confine aggiunto al enfatizzare i contorni di rendering):Forza due nodi per occupare la stessa posizione in Graphviz?

Before

Quello che voglio davvero è per A e K in fila insieme al sopra (o sinistra, se rankdir = "LR"). Così ho aggiunto un nodo invisibile (lo chiamano X), e ha aggiunto spigoli invisibili da X ad A e K. Ed ecco che cosa ho ottenuto:

After

X, XA, e XK non hanno etichette, e lo stile impostato su 'invis'. X ha altezza, larghezza e margine impostati su 0 e fixedsize impostato su true. XA e XK hanno minlen, len e penwidth impostati su 0.

Ma c'è ancora quello spazio vuoto in alto. C'è un modo per sbarazzarsene, a corto di ritaglio dopo il fatto?

risposta

3

Non è necessario alcun nodo invisibile per ottenere ciò.

Questa è la sintassi del punto per forzare lo stesso rango per due nodi:

{rank=same; A; K;} 

Questo è chiamato un subgraph.

non so rubino graphviz, non sono sicuro di come creare un sottografo - ma c'è un example on github:

c2 = g.subgraph { |c| 
    c[:rank => "same"] 
    c.mysite[:label => "\nexample.com\n ", :shape => "component", :fontname => "Arial"] 
    c.dotgraph[:label => "\ndotgraph.net\n ", :shape => "component", :fontname => "Arial"] 
} 
+0

Ci sono voluti un po 'di dispute supplementare per ottenere la soluzione di cui sopra al lavoro, ma i sottografi si sono rivelati la chiave. Grazie! – mbklein

+0

Un esempio molto bello di risposta che risolve il problema dell'OP senza rispondere alla sua domanda. Ho il vero problema di "come impedire ai nodi invisibili di occupare spazio" ... ;-) – DevSolar

+0

@DevSolar ... o un esempio di una domanda sbagliata per risolvere il problema iniziale :-) Comunque sia, IMHO il più delle volte, è meglio non usare nodi invisibili se esiste un'altra soluzione. Ma vai avanti e posta una domanda sul tuo particolare problema, qualcuno potrebbe essere in grado di trovare una soluzione. – marapet