2009-07-09 32 views
6

Tôi có một số đồ thị tương đối đơn giản (được tạo tự động) ở định dạng dấu chấm graphviz. Chúng hiển thị đường dẫn thông qua một máy trạng thái, nhưng dấu chấm có một thói quen hơi khó hiểu khi quyết định rằng hai nút phải nằm trên cùng một thứ hạng khi tôi muốn đồ thị theo thứ tự trạng thái. Tôi đã thử nhiều cài đặt (bao gồm cả :n:sweight được liệt kê bên dưới), nhưng tôi không thể thuyết phục dấu chấm để đặt Trạng thái thứ ba là ở trên Trạng thái thứ tư.Làm thế nào để bạn buộc xếp hạng trên một nút trong dấu chấm?

Tôi gặp vấn đề này với rất nhiều đồ thị: có vẻ như có gì đó bên trong dấu chấm quyết định rằng sẽ tốt hơn nếu hai nút trên cùng một thứ hạng và không có gì có thể được thực hiện để ghi đè lên nó. Tôi thậm chí đã có mã chỉ định rằng một nút nên là một rank=sink, nhưng dấu chấm đã quyết định đặt một nút bên dưới nó anyway.

Có cách nào gợi ý dấu chấm quan trọng hơn là các nút được sắp xếp theo thứ tự hơn bất kỳ ràng buộc nào khác không?

Mã đã được sử dụng để tạo ra các đồ thị trông như thế này:

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

Đồ thị hiện trông như thế này: Dot Graph

Trả lời

10

Sử dụng "chế = false".

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

Trong đồ thị của bạn:

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

Bạn sẽ nhận được:

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

Fantastic: cảm ơn bạn! – DrAl

Các vấn đề liên quan