2012-07-21 14 views
6

मैं ग्राफविज़ का उपयोग कर एक साधारण फिनिट स्टेट मशीन ग्राफ को देखने की कोशिश कर रहा हूं। ग्राफवीज़ द्वारा बनाया गया लेआउट मेरी पसंद के लिए पूरी तरह से नहीं है। मैं छोटे किनारों के साथ एक और कॉम्पैक्ट परिणाम की उम्मीद कर रहा था।ग्राफ आइटम के लेआउट को कैसे प्रभावित करें?

अब तक, मैंने समूहों का उपयोग करने और किनारों के वजन को बदलने की कोशिश की है, लेकिन बहुत भाग्य नहीं है। यह मुझे स्पष्ट नहीं है कि ग्राफविज़ ग्राफ को जिस तरह से करता है और मेरी पसंद के लिए अपने एल्गोरिदम को कैसे समायोजित करता है। क्या कोई ऐसा पैरामीटर है जिसे मैं प्राप्त करने के लिए सेट कर सकता हूं? या मुझे dot से दूसरे कमांड का उपयोग करना चाहिए? मैं neato कोशिश की, लेकिन परिणाम पूरी तरह से में गड़बड़ लग रहा था और फिर से, मैं वास्तव में समझ में नहीं आता मैं क्या कर रहा हूँ ...

यह मेरा सबसे अच्छा परिणाम अब तक है:

Finite State Machine, best result so far

कल्पना करने के लिए कोशिश कर रहा है इस तुलना में एक बेहतर रखना-आउट, मुझे लगता है कि ग्राफ उदाहरण के लिए अगर लाल बक्से अलग ढंग से गठबंधन कर रहे थे अच्छे विचार करेंगे, अधिक कॉम्पैक्ट इस चित्र में तीर द्वारा संकेत की तरह:

Finite State Machine, imagined better result

मैं ग्राफ़ बनाने के लिए dot का इस्तेमाल किया और वह इस प्रकार है स्रोत कोड है:

1 digraph JobStateDiagram 
    2 { 
    3 rankdir=LR; 
    4 size="8,5"; 
    5 
    6 node [style="rounded,filled,bold", shape=box, fixedsize=true, width=1.3, fontname="Arial"]; 
    7 Created [fillcolor=black, shape=circle, label="", width=0.25]; 
    8 Destroyed [fillcolor=black, shape=doublecircle, label="", width=0.3]; 
    9 Empty  [fillcolor="#a0ffa0"]; 
10 Announced [fillcolor="#a0ffa0"]; 
11 Assigned [fillcolor="#a0ffa0"]; 
12 Working [fillcolor="#a0ffa0"]; 
13 Ready  [fillcolor="#a0ffa0"]; 
14 TimedOut [fillcolor="#ffa0a0"]; 
15 Failed [fillcolor="#ffa0a0"]; 
16 
17 { 
18  rank=source; Created Destroyed; 
19 } 
20 
21 edge [style=bold, fontname="Arial" weight=2] 
22 Empty  -> Announced [ label="announce" ]; 
23 Announced -> Assigned [ label="assign"  ]; 
24 Assigned -> Working [ label="start"  ]; 
25 Working -> Ready  [ label="finish"  ]; 
26 Ready  -> Empty  [ label="revoke"  ]; 
27 
28 edge [fontname="Arial" color="#aaaaaa" weight=1] 
29 Announced -> TimedOut [ label="timeout" ]; 
30 Assigned -> TimedOut [ label="timeout" ]; 
31 Working -> TimedOut [ label="timeout" ]; 
32 Working -> Failed [ label="error"  ]; 
33 TimedOut -> Announced [ label="announce" ]; 
34 TimedOut -> Empty  [ label="revoke"  ]; 
35 Failed -> Announced [ label="announce" ]; 
36 Failed -> Empty  [ label="revoke"  ]; 
37 
38 edge [style=bold, fontname="Arial" weight=1] 
39 Created -> Empty  [ label="initialize" ]; 
40 Empty  -> Destroyed [ label="finalize" ]; 
41 Announced -> Empty  [ label="revoke"  ]; 
42 Assigned -> Empty  [ label="revoke"  ]; 
43 Working -> Empty  [ label="revoke"  ]; 
44 } 

इसके अलावा, किसी को भी मुझे पता है कि अगर मैं Graphviz में किसी भी विचित्र बातें ऊपर दायर करते हैं तो कृपया - किसी भी प्रतिक्रिया की सराहना की है।


अद्यतन:

अधिक प्रयोग और बंदरगाहों, उपयोगकर्ता marapet द्वारा दिए गए जैसे कुछ सुझावों को आज़माने, मेरे भ्रम की स्थिति में वृद्धि हुई है उदाहरण के लिए ..., नीचे चित्र में, क्यों ये अजीब आकर्षित करने के लिए चुनें dot है Working->Failed और Failed->Announced के लिए स्ट्राइटर लाइनों के विरोध में?

Graph with strange long edges

+0

निर्देशित लेआउट (डॉट, ट्विपी, सर्को, पैचवर्क, ओसेज) के लिए कई ग्राफविज़ टूल हैं https://graphviz.gitlab.io/_pages/pdf/dot.1.pdf वे कोशिश करने लायक हो सकते हैं। – qneill

उत्तर

9

मेरे लिए अपने उत्पादन ठीक लग रहा है। TimedOut और Failed बिल्कुल सही तरीके से सभी तरह से हैं क्योंकि Working से उनके किनारे जा रहे हैं। यही है dot सबसे अच्छा करता है, और जब आप ग्राफविज़ लेआउट को समायोजित करने के लिए कुछ बदलाव कर सकते हैं, तो मुझे लगता है कि यदि आप एक विशेष ग्राफ़ लेआउट बनाना चाहते हैं और सबकुछ नियंत्रित करना चाहते हैं तो एक अन्य टूल का उपयोग करना बेहतर होता है।

कहा जा रहा है, मैंने इसे ग्राफविज़ के साथ त्वरित प्रयास दिया है। मैंने सभी ग्रीन नोड्स के साथ सीधी रेखा बनाने के लिए कुछ लाइनें बदल दीं, और आपके प्रश्न में बताए गए लाल नोड्स को संरेखित करने के लिए। आदेश नियंत्रित करने के लिए जहां किनारों शुरू और अंत में बंदरगाहों का उपयोग करके

digraph JobStateDiagram 
{ 
    rankdir=LR; 
    size="8,5"; 
    concentrate=true; 

    node [style="rounded,filled,bold", shape=box, fixedsize=true, width=1.3, fontname="Arial"]; 
    Created [fillcolor=black, shape=circle, label="", width=0.25]; 
    Destroyed [fillcolor=black, shape=doublecircle, label="", width=0.3]; 
    Empty  [fillcolor="#a0ffa0"]; 
    Failed [fillcolor="#ffa0a0"]; 
    Announced [fillcolor="#a0ffa0"]; 
    Assigned [fillcolor="#a0ffa0"]; 
    Working [fillcolor="#a0ffa0"]; 
    Ready  [fillcolor="#a0ffa0"]; 
    TimedOut [fillcolor="#ffa0a0"]; 

    { 
    rank=source; Created; Destroyed; 
    } 
    { 
    rank=same;Announced;Failed; 
    } 
    { 
    rank=same;Assigned;TimedOut; 
    } 

    edge [style=bold, fontname="Arial", weight=100] 
    Empty  -> Announced [ label="announce" ]; 
    Announced -> Assigned [ label="assign"  ]; 
    Assigned -> Working [ label="start"  ]; 
    Working -> Ready  [ label="finish"  ]; 
    Ready  -> Empty  [ label="revoke", weight=1  ]; 

    edge [color="#aaaaaa", weight=1] 
    Announced -> TimedOut [ label="timeout" ]; 
    Assigned -> TimedOut [ label="timeout" ]; 
    Working -> TimedOut [ label="timeout" ]; 
    Working -> Failed [ label="error"  ]; 
    TimedOut -> Announced [ label="announce" ]; 
    TimedOut -> Empty  [ label="revoke"  ]; 
    Failed -> Announced [ label="announce" ]; 
    Failed -> Empty  [ label="revoke"  ]; 

    Created -> Empty  [ label="initialize" ]; 
    Empty  -> Destroyed [ label="finalize" ]; 
    Announced -> Empty  [ label="revoke"  ]; 
    Assigned -> Empty  [ label="revoke"  ]; 
    Working -> Empty  [ label="revoke"  ]; 
} 

graphviz output

तुम भी सुधार हो सकता है: परिणाम मेरे लिए बेहतर नहीं लगती है - मैं भी बढ़त संकेंद्रक गयी।

अपने डॉट फ़ाइल में अजीब चीजों के बारे में अपने प्रश्न का रूप: लाइन नंबर सिवाय और संरेखित (जो अंत में मुझे मेरे पाठ अच्छा उपयोग करने के लिए संपादक के स्तंभ मोड डालने की अनुमति) अपनी फ़ाइल को ठीक लग रहा है मुझे।जब भी संभव हो मैं अपनी डॉट फाइलों को समान रूप से (ग्राफ गुण, नोड सूची, समूह, किनारों) संरचना करता हूं। बस ध्यान रखें कि नोड्स की पहली उपस्थिति के आदेश के अंतिम लेआउट पर असर पड़ सकता है।

+0

इसे आजमाने और मुझे कुछ और सुझाव देने के प्रयास करने के लिए धन्यवाद। मैंने कुछ परिणामों के साथ सवाल अपडेट किया है। मुझे नहीं लगता कि यह अभी तक एक पूर्ण समाधान है, इसलिए जो कुछ मैं ढूंढ रहा हूं उसे हासिल करने के लिए यह मेरी तरफ से कुछ और प्रयोग करेगा। –

संबंधित मुद्दे