2009-07-09 79 views
6

我有一些相對簡單的(自動生成)graphviz點格式圖。這些顯示了通過狀態機的路徑,但是當我希望圖形處於狀態順序時,dot有一個稍微混淆的習慣,即決定兩個節點必須處於相同的級別。我嘗試了很多設置(包括下面列出的:n:sweight),但我無法說服dot將第三州置於以上。你如何強制在點上的節點排名?

我有很多圖的這個問題:似乎有點內部的東西,決定它會更好,如果兩個節點在相同的排名,並沒有什麼可以做到覆蓋它。我甚至有代碼指出一個節點應該是rank=sink,但dot已決定將另一個節點放在它下面。

有沒有什麼辦法可以說明節點比任何其他約束更重要?

這是用於生成圖表的代碼如下所示:

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"]; 
} 

圖表目前看起來是這樣的: Dot Graph

回答

10

使用「約束=假」。

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

在您的圖表:

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

您將獲得:

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

意想不到:謝謝! – DrAl 2009-07-10 07:15:21

相關問題