2009-07-09 9 views
6

Ho un numero di grafici relativamente semplici (auto-generati) in formato punto graphviz. Questi mostrano il percorso attraverso una macchina a stati, ma dot ha un'abitudine leggermente confusa di decidere che due nodi devono essere sullo stesso rango quando vorrei che il grafico fosse in ordine di stato. Ho provato molte impostazioni (incluso lo :n e lo :s e lo weight elencati di seguito), ma non riesco a convincere il punto a collocare il Terzo stato al di sopra dello del Quarto Stato.Come si forza il rango su un nodo in punto?

Ho questo problema con molti grafici: sembra esserci qualcosa di interno a punto che decide che sarebbe meglio se due nodi fossero sullo stesso rango e non c'è nulla che possa essere fatto per sovrascriverlo. Ho anche avuto il codice che specifica che un nodo dovrebbe essere un rank=sink, ma punto ha deciso di mettere un altro nodo al di sotto di esso comunque.

C'è un modo per suggerire di dotare che è più importante che i nodi siano in ordine rispetto a qualsiasi altro vincolo?

Il codice che è stato utilizzato per generare il grafico si presenta così:

digraph { 
    ERROR [label="Error"]; 
    FirstSTATE [label="Initial State" URL="\ref FirstSTATE"]; 
    FirstSTATE -> SecondSTATE; 
    SecondSTATE [label="Second State" URL="\ref SecondSTATE"]; 
    SecondSTATE -> ThirdSTATE; 
    ThirdSTATE [label="Third State" URL="\ref ThirdSTATE"]; 
    FourthSTATE [label="Fouth State?" shape="diamond"]; 
    ThirdSTATE:s -> FourthSTATE:n [weight=50]; 
    FourthSTATE -> FifthSTATE [label="Yes" ]; 
    FourthSTATE -> ThirdSTATE [label="No"]; 
    FifthSTATE [label="Fifth State" URL="\ref FifthSTATE"]; 
    SixthSTATE [label="Sixth State?" shape="diamond"]; 
    SixthSTATE -> ERROR [label="Yes" ]; 
    SixthSTATE -> SeventhSTATE [label="No"]; 
    FifthSTATE -> SixthSTATE; 
    SeventhSTATE [label="Seventh State" URL="\ref SeventhSTATE"]; 
    SeventhSTATE -> EighthSTATE; 
    EighthSTATE [label="Eighth State" URL="\ref EighthSTATE"]; 
    NinthSTATE [label="Ninth State?" shape="diamond"]; 
    NinthSTATE -> TenthSTATE [label="Yes" ]; 
    NinthSTATE -> EighthSTATE [label="No"]; 
    EighthSTATE -> NinthSTATE; 
    TenthSTATE [label="Tenth State" URL="\ref TenthSTATE"]; 
    EleventhSTATE [label="Eleventh State?" shape="diamond"]; 
    EleventhSTATE -> ERROR [label="Yes" ]; 
    EleventhSTATE -> TwelfthSTATE [label="No" ]; 
    TenthSTATE -> EleventhSTATE; 
    TwelfthSTATE [label="Twelfth State" URL="\ref TwelfthSTATE"]; 
} 

Il grafico attualmente si presenta così: Dot Graph

risposta

10

Usa "vincolo = false".

http://www.graphviz.org/doc/info/attrs.html#d:constraint

nel grafico:

FourthSTATE -> ThirdSTATE [label="No" constraint=false] ; 

Otterrete:

digraph { 
    ERROR [label="Error"]; 
    FirstSTATE [label="Initial State" URL="\ref FirstSTATE"]; 
    FirstSTATE -> SecondSTATE; 
    SecondSTATE [label="Second State" URL="\ref SecondSTATE"]; 
    SecondSTATE -> ThirdSTATE; 
    ThirdSTATE [label="Third State" URL="\ref ThirdSTATE"]; 
    FourthSTATE [label="Fouth State?" shape="diamond"]; 
    ThirdSTATE -> FourthSTATE; 
    FourthSTATE -> FifthSTATE [label="Yes" ]; 
    FourthSTATE -> ThirdSTATE [label="No" constraint=false] ; 
    FifthSTATE [label="Fifth State" URL="\ref FifthSTATE"]; 
    SixthSTATE [label="Sixth State?" shape="diamond"]; 
    SixthSTATE -> ERROR [label="Yes" ]; 
    SixthSTATE -> SeventhSTATE [label="No"]; 
    FifthSTATE -> SixthSTATE; 
    SeventhSTATE [label="Seventh State" URL="\ref SeventhSTATE"]; 
    SeventhSTATE -> EighthSTATE; 
    EighthSTATE [label="Eighth State" URL="\ref EighthSTATE"]; 
    NinthSTATE [label="Ninth State?" shape="diamond"]; 
    NinthSTATE -> TenthSTATE [label="Yes" ]; 
    NinthSTATE -> EighthSTATE [label="No"]; 
    EighthSTATE -> NinthSTATE; 
    TenthSTATE [label="Tenth State" URL="\ref TenthSTATE"]; 
    EleventhSTATE [label="Eleventh State?" shape="diamond"]; 
    EleventhSTATE -> ERROR [label="Yes" ]; 
    EleventhSTATE -> TwelfthSTATE [label="No" ]; 
    TenthSTATE -> EleventhSTATE; 
    TwelfthSTATE [label="Twelfth State" URL="\ref TwelfthSTATE"]; 
} 
+0

Fantastico: grazie! – DrAl