2010-06-27 6 views
21

मुझे एक ग्राफ मिला है कि मैं ग्राफवीज़ को लेआउट में ले जाना चाहता हूं और मेरे लिए कल्पना कर सकता हूं। ग्राफ में 122 किनारों और 123 नोड्स हैं। किनारों 4 अलग-अलग प्रकार के हैं और मैं उन्हें दृष्टि से अलग करने के लिए चाहता हूं। हालांकि मैंने अभी तक यह तय नहीं किया है कि ऐसा करने का सबसे अच्छा तरीका क्या होगा, मैं डायल के साथ थोड़ा सा खेलना चाहता हूं। दुर्भाग्य से मुझे किनारों के लिए "कक्षा" या "स्टाइलशीट" विशेषता जैसी कुछ भी दिखाई नहीं दे रही है। मैं केवल प्रत्येक किनारे (पुनरावृत्ति के बहुत सारे) के लिए व्यक्तिगत रूप से दृश्य विशेषताओं को सेट कर सकता हूं। शायद मुझे कुछ याद आया है? क्या 4 अलग-अलग समूहों में किनारों को जोड़ने के बाद शायद कुछ रास्ता हो सकता है और फिर समूह को स्टाइल कर सकते हैं, प्रत्येक किनारे अलग-अलग नहीं?ग्राफवीज़: किनारों के समूह में एक ही शैली को कैसे असाइन करें?

उत्तर

30

बल्कि व्यक्तिगत रूप से किनारों (या नोड्स) शैली के लिए समूह द्वारा, subgraph का उपयोग करें।

तो जैसे:

digraph G { 

node [style=filled,color="#5D8AA8", fillcolor="#5D8AA8"]; 

subgraph c1 { 
    edge [color="#004225", arrowsize="0.6", penwidth="1"]; 
    "node 1" -> "node 3"; 
    "node 5" -> "node 7"; 
    "node 1" -> "node 2"; 
    label = ""; 
} 

subgraph c2 { 
    edge [color="#FBEC5D", arrowsize="1.2", penwidth="3"]; 
    "node 2" -> "node 4"; 
    "node 4" -> "node 6"; 
    "node 3" -> "node 5"; 
    "node 6" -> "node 8"; 
    label = ""; 

} 

begin -> "node 1"; 
start -> "node 2"; 
"node 1" -> "node 4" 
"node 2" -> "node 6"; 

start [shape=diamond];} 

तो तुम एक फ़ाइल w/एक ".dot" विस्तार में उपरोक्त कोड डाल अगर; फिर इसे ग्राफविज़ में प्रस्तुत करें, आप तीन विभिन्न प्रकार के किनारों, उपस्थिति के अनुसार देखेंगे।

एक प्रकार केवल डिफ़ॉल्ट (रंग = काला, मोटाई = 1, आदि) है - यानी, इन किनारों को एक उप-अनुच्छेद को असाइन नहीं किया गया है।

अन्य दो प्रकार के किनारों (एक पतला, गहरा-हरा समूह, और एक मोटी, उज्ज्वल-पीला समूह) दो उपग्राफ समूहों में से एक को असाइनमेंट के आधार पर स्टाइल किया जाता है।

subgraph अक्सर (जैसे कि, ग्राफ में नोड्स के बाकी हिस्सों से नोड्स के एक विशेष सन्निहित 'समूह' भेद करने के लिए) नेत्रहीन उजागर एक नोड क्लस्टर के लिए प्रयोग किया जाता है; हालांकि, कोई आवश्यकता नहीं है (जैसा कि आप मेरे उदाहरण से देख सकते हैं) कि किनारों को आपने किसी दिए गए सबग्राफ को असाइनमेंट द्वारा स्टाइल करने के लिए चुना है, नोड्स के एक संगत 'समूह' से संबंधित हैं - आप असाइनमेंट के लिए इच्छित किसी भी किनार को निर्दिष्ट कर सकते हैं किसी दिए गए उप ग्राफ।)

मेरे लिए, समूह द्वारा स्टाइल नोड्स एक वर्ग को परिभाषित करने और HTML मार्कअप में divs का एक संग्रह करने के लिए इसे देने की एचटीएमएल अभ्यास के अनुरूप है

+0

हम subgraphs के लिए डिफ़ॉल्ट शैली को कैसे निर्धारित कर सकते हैं? – Pacerier

+1

उप-अनुच्छेदों की कोई आवश्यकता नहीं है। "धार [रंग = ... आदि]" के साथ किनारे शैली घोषणा के नीचे परिभाषित सभी किनारों का उपयोग उस शैली का उपयोग करेगा। – Bousch

12

जबकि @ डौग जवाब सही है (subgraphs का उपयोग की वस्तुओं के समूहों के लिए समान शैली आवंटित करने के लिए), मेरा मानना ​​है कि मेरे उदाहरण बेहतर है:

digraph G {                  
    compound=true; 
    subgraph columns { 
    c0r0 -> c0r1; 
    c0r1 -> c0r2; 
    c1r0 -> c1r1; 
    c1r1 -> c1r2; 
    c2r0 -> c2r1; 
    c2r1 -> c2r2; 
    } 
    subgraph rows { 
    edge [color=red, constraint=false]; 
    c0r0 -> c1r0; 
    c1r0 -> c2r0; 
    c0r1 -> c1r1; 
    c1r1 -> c2r1; 
    c0r2 -> c1r2; 
    c1r2 -> c2r2; 
    } 
} 


cat square-digraph.dot | dot -Tsvg -o square-digraph.svg 

the resulting graph

+1

बिल्कुल सही, बिल्कुल सही। – Pacerier

+1

यह बेहतर क्यों है? आपको आलोचना करने का मतलब नहीं है। मुझे यह समझने के लिए पर्याप्त ग्राफिक्स पर्याप्त नहीं है कि यह कैसे बेहतर है और मुझे पता लगाना है। –

+0

मुझे परिणामस्वरूप आरेख पसंद है। समाधान का सिद्धांत अलग नहीं है। – bukzor

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