2013-06-28 5 views
6

मैं वर्तमान में जावा में एक ग्राफ पुस्तकालय लिख रहा हूं, और मुझे कुछ ग्राफों को देखने के लिए एक उपकरण चाहिए। मैंने ग्राफ-विज़ की खोज की, जो कि एक महान होता है - हालांकि छोटी गाड़ी - ऐसा करने का तरीका।ग्राफविज़ (xdot): रिकर्सिव नोड्स कैसे बनाएं?

मेरे मॉडल में, रेखांकननोड्स और किनारों से बनी हैं। हर नोडबंदरगाहों (आई/ओ/आईओ) और किनारों लिंक उन बंदरगाहों एक साथ की एक निश्चित संख्या है। कुछ विशेष नोड्स को ग्राफ़ नोड्स कहा जाता है और ग्राफ़ एम्बेड किया जाता है। बंदरगाहों इन GraphNodes की कुछ बंदरगाहों आंतरिक नोड्स की पर मैप किए जाते।

मैं कई प्रतिनिधित्व प्रदान करना चाहता हूं। उनमें से पहले, जिसके साथ मैं संतुष्ट हूं, इस प्रकार है: http://i.stack.imgur.com/ujU71.png

इनपुट बंदरगाहों हरे रंग में प्रतिनिधित्व कर रहे हैं, लाल रंग में उत्पादन वाले, और नीले रंग में इनपुट-आउटपुट वाले।

इस प्रतिनिधित्व में, GraphNodes का विस्तार नहीं कर रहे हैं और बस के रूप में सरल नोड्स प्रदर्शित होते हैं। दूसरे संस्करण में, मैं कुछ चित्र बनाना चाहता हूं जो निम्न चित्र जैसा दिखता है: http://i.stack.imgur.com/Cx624.png

समस्या यह है कि मैं निश्चित क्षेत्रों के साथ उप-ग्राफ (क्लस्टर) बनाने का प्रबंधन नहीं कर सकता (ऐसा लगता है कि ऐसा नहीं है मुमकिन)। मैंने कोशिश की एक और समाधान एक ग्राफ को एक नोड में एम्बेड करना था। http://i.stack.imgur.com/E9jQ1.png

अंत में, सबसे अच्छा समाधान के साथ आ रहा है कर सकते हैं:

digraph graph0 
{ 

    node1 
    [ 
     label = 
     < 
      <table border="0" cellspacing="0"> 
       <tr> 
        <td cellpadding="0"> 
         <table border="0" cellspacing="0"> 
          <tr> 
           <td bgcolor="palegreen" border="1" port="port2">port2</td> 
           <td bgcolor="palegreen" border="1" port="port3">port3</td> 
          </tr> 
         </table> 
        </td> 
       </tr> 
       <tr> 
        <td cellpadding="0"> 
         <table border="0" cellspacing="0"> 
          <tr> 
           <td cellpadding="0"> 
            <table border="0" cellspacing="0"> 
             <tr> 
              <td bgcolor="skyblue" border="1" port="port5">port5</td> 
             </tr> 
            </table> 
           </td> 
           <td bgcolor="peachpuff" border="1"> 

            subgraph clusterTest 
            { 
             nodeTest 
            } 

           </td> 
          </tr> 
         </table> 
        </td> 
       </tr> 
       <tr> 
        <td cellpadding="0"> 
         <table border="0" cellspacing="0"> 
          <tr> 
           <td bgcolor="lightpink" border="1" port="port4">port4</td> 
          </tr> 
         </table> 
        </td> 
       </tr> 
      </table> 
     > 
     style = "invisible" 
    ] 

} 

पिछले कोड निम्नलिखित ग्राफ बनाता है: हालांकि, एक एचटीएमएल लेबल के <td> </td> भाग में कुछ कोड डालने कोड का मूल्यांकन नहीं करता निम्नलिखित: http://i.stack.imgur.com/VzS5g.png

हालांकि मैं इसे से संतुष्ट हैं, क्योंकि GraphNodes 'बंदरगाहों कभी कभी अजीब स्थानों में रखा जाता है कर रहा हूँ।

क्या आप जानते हैं कि मैं लक्ष्य ग्राफ़ लेआउट तक कैसे पहुंच सकता हूं? यदि आवश्यक हो तो कृपया किसी भी अन्य जानकारी के लिए पूछें।


संपादित करें: मैं अभी भी किसी भी समाधान नहीं मिला। इसे संभालने का एक तरीका युक्त क्लस्टर के अंदर दिए गए नोड्स की स्थिति को ठीक करने में सक्षम होना चाहिए, लेकिन ऐसा लगता है कि "डॉट" लेआउट के साथ संभव नहीं है। कोई उपाय ?

उत्तर

1

एक डिग्राफ का उपयोग करके, कोई नोड्स की स्थिति निर्दिष्ट कर सकता है (एक दूसरे के सापेक्ष)। इसका उपयोग कुछ तत्वों को दूसरों के ऊपर प्रकट करने के लिए मजबूर करने के लिए किया जा सकता है।अन्य नोड एक ही स्तर (पोर्ट 101 और 102 इस उदाहरण में)

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


nesting


संयुक्ताक्षर { nodesep = 0.2 ranksep = 0.8 पैड = 0.1 नोड [आकार = वर्ग] नोड [शैली = भरा] धार [तीर = कोई भी]

// रैंकडीर = एलआर

component_starter [लेबल = < port02 port03 port06 एस port07 port08 port04 port05 > शैली = "अदृश्य"]

subgraph cluster_container { लेबल = "मैं/हे घटकों के साथ डिवाइस " रंग = नारंगी

//margin = 0 
edge [ style="invis"] 
//edge [ len="0.5" minlen="1" ] 
node [ height="0.5" width="2" fixedsize=true ]; 
node [ shape=rectangle style=filled ] 
{ 
node [ color=palegreen ]; 
    { rank = same port101 -> port102 } 
} 
{ 
node [ color=skyblue]; 
    port103 port104 } 
{ 
node [ height="1.5" width="2" fixedsize=true ]; 
node [ color=peachpuff]; 
    //notaport 
} 
{ 
node [ height="0.5" width="4" fixedsize=true ]; 
node [ color=lightpink]; 
    output 
} 

// -

//subgraph cluster_inner { 
    //label="abstractions" 
    //color="black" 
    //style="invis" 
    component_a [ label = < 
     <table border="0" cellspacing="0"><tr> 
      <td border="1" bgcolor="white" > </td> 
      <td border="1" bgcolor="palegreen" port="port2">port2</td> 
      <td border="1" bgcolor="palegreen" port="port3">port3</td> 
     </tr><tr> 
      <td border="1" bgcolor="skyblue" port="port6">port6</td> 
      <td border="1" bgcolor="peachpuff" rowspan="3" colspan="2">A</td> 
     </tr><tr> 
      <td border="1" bgcolor="skyblue" port="port7">port7</td> 
     </tr><tr> 
      <td border="1" bgcolor="skyblue" port="port8">port8</td> 
     </tr><tr> 
      <td border="1" bgcolor="lightpink" colspan="1" port="port4">port4</td> 
      <td border="1" bgcolor="lightpink" colspan="2" port="port5">port5</td> 
     </tr></table> > style = "invisible" ] 

    component_b [ label = < 
     <table border="0" cellspacing="0"><tr> 
      <td border="1" bgcolor="white" > </td> 
      <td border="1" bgcolor="palegreen" port="port22">port22</td> 
      <td border="1" bgcolor="palegreen" port="port23">port23</td> 
     </tr><tr> 
      <td border="1" bgcolor="skyblue" port="port25">port25</td> 
      <td border="1" bgcolor="peachpuff" colspan="2"> B </td> 
     </tr><tr> 
     <td border="1" bgcolor="lightpink" colspan="3" port="port24">port24</td> 
     </tr></table> > style = "invisible" ] 

// -

component_c [ label = < 
     <table border="0" cellspacing="0"><tr> 
      <td border="1" bgcolor="white" > </td> 
      <td border="1" bgcolor="palegreen" port="port32">port32</td> 
      <td border="1" bgcolor="palegreen" port="port33">port33</td> 
     </tr><tr> 
      <td border="1" bgcolor="skyblue" port="port35">port35</td> 
      <td border="1" bgcolor="peachpuff" colspan="2"> C </td> 
     </tr><tr> 
     <td border="1" bgcolor="lightpink" colspan="3" port="port34">port34</td> 
     </tr></table> > style = "invisible" ] 
//} 


port101 -> port103 
port102 -> component_a 
port102 -> component_b 
port103 -> port104 

component_a -> output; 
component_b -> output; 
component_c -> output; 

edge [ style="" arrowhead="normal" color="#444444"] 
component_a:port4 -> output; 

component_c:port34 -> component_a:port3; 
component_a:port5 -> component_b:port22; 

port101 -> component_c:port33 

// -

{ rank = same 

    edge [ dir=back ] 
    port104 -> component_a:port8 
} 

} 

component_starter; 
component_starter:port5 -> port101; 

} 

ऊपर डॉट फ़ाइल, संकुचित। इसे देखने के लिए base64 -d nesting.bz2.base64 |bzcat का उपयोग करें।

QlpoOTFBWSZTWd/epEIABCzfgHAwWAP/3zgkmAq/7//6UASZm8a7VNrQBQQlSDUaYjTINGjIyZAG 
ho0aNMgkUZJpEIzUw0TTEzQBoAIwCTUiFT1NppDymGk0Pap6gMmCaAAcwAAAAAAAAAAFSRJoGp6B 
TyNTyhABoD1DQ0aephLyAcTAhMSQiKogMBLsVaZBYIwUHIGFISYVKCMVkRgLypG2mhHPb5z0hBap 
yN3HCL2iJVDYvXI6SykmzPN9LCaex+63c7jyTnk18c2KgvDZq6Kkz+WWf4DU4KoQsCQJ1gKpAcwC 
mp5nGnmlI8wBNtgDi+Hmf0/g/v4PoNaZVrhy5cdWCavJkutPC0t50kljBJLHXrbQUjJMPPDCUKwN 
NHO8aaiqKTus3tLEpprCW8Gzr68DtvyteHrqa7JJ9J46R4muUMuU39kJYPEgwJWwCSqsgMteezTo 
ta1rr3va1sccdW/32OJUROFkmUzqeyHn+g96EccgEY5SfJixh2aJgQC0JVmWAtrdagoOkDZAViKA 
qUpGZ1dXNJikmmsRZmAO16Kq9osW7KzzPZPS9IeLIqXo0cOoNwatry3Mi792YMRvA3oiKxe84ac7 
EMGmdrabTaG0qqDpAMJJn5IeAbvMNiSJW8og7y+Ik+CExJBhLDZlKFSFKMBgIIMai57J5pLmgl5R 
Qm261e797RF6qhy82NQypLEa8ktUVAL2R1hxThWC3pVB0jBThRxVLfHHJeZHv+pMEkxZ3P6KP+ho 
QWyC9gtIM2cxJK2pIiiIooOPlxE0kkspJPijcgrHRHw6XvMpwy5ldiqlUpWzvymgxr78zAXh4vSW 
L3jya8Hqc6ekwhhDROybThDBnIdmdlN6ClO8bo7ucxNqSVjHNGd8F8ocW2qmT0bJRujojA9MJqnC 
TPg09tZlJ5d/am7W8E6GeU3TkyVC0N5nTgeXXn7Sj1UWijm1Q07OKeXiyPbENRSNcNzrnkyxkNeu 
RgS5GWEXKkpTdIy8NenUhVYpqkbUCushe+cQ15oMcRIrb4GZscDDVmLk3LF7Txk6yFvmky8aoiK5 
T+3pVRjVVVUtLRVFFI0q1lrpHlGqNnHKOVIKkktUYAuq2L1bekwQeG68LX3tK64kVNRw2tDb7rLn 
acBl0J61Ld57HXXHKpXLjoqAo5yyRvQ/YxLdufjNCSaEk4mmYLcZp1ybI1BqDTum20PSm2cId4pU 
Zx00pZzOJZwnSHjAqXNkWCM4s/+LuSKcKEhv71IhAA== 
+0

मैं इसे अपने गोद में छोड़ रहा हूं, क्योंकि मुझे अभी भागना है। यदि प्रश्न हैं (विवरण) मैं जवाब में जोड़ सकता हूं तो मुझे बताएं ... –

+0

हाय! आपके उत्तर के लिए धन्यवाद, क्षमा करें मैं पहले इसका परीक्षण नहीं कर सका। हालांकि मैं इसे चलाने के लिए प्रबंधन नहीं कर सकता। ऐसा लगता है कि पाइथन रीट्रेविंग विशेषता 'चौड़ाई' पर असफल रहा है। Xdot का कौन सा संस्करण आप इसे देखने के लिए उपयोग करते हैं (मेरा 0.4 है)? या एक और मुलायम? वैसे भी, आपका जवाब मेरे लिए बिल्कुल सही लग रहा है! –

+0

मैंने सीधे ग्राफविज़ के साथ प्रस्तुत किया। डॉट - ग्राफविज़ संस्करण 2.26.3 –

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