2009-07-09 7 views
6

graphviz 도트 형식의 비교적 간단한 (자동 생성 된) 그래프가 많이 있습니다. 이것들은 상태 머신을 통한 경로를 보여 주지만, 도트는 그래프가 상태 순서대로되기를 원할 때 두 개의 노드가 같은 순위에 있어야한다고 결정하는 약간 혼란스러운 버릇이 있습니다. 많은 설정 (:n:s 및 아래에 나열된 weight 포함)을 시도했지만 점을 설득하여 제 3 상태를 위의 위의 네 번째 상태로 설득 할 수는 없습니다.점의 노드에서 어떻게 순위를 매기려고합니까?

많은 그래프에서이 문제가 있습니다. 두 개의 노드가 같은 순위에 있고 그 값을 무시할 수있는 것이 없다면 더 좋은 점을 결정하는 내부 점이있는 것 같습니다. 심지어 하나의 노드가 rank=sink이어야한다고 지정하는 코드가 있었지만 점은 다른 노드를 그 아래에 배치하기로 결정했습니다.

노드가 다른 제약 조건보다 순서가 중요하다는 점을 지적 할 방법이 있습니까?

그래프를 생성하는 데 사용 된 코드는 다음과 같습니다

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

사용 "제약 = false"로. 그래프에서

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