2012-10-17 18 views
7

मेरे पास निम्न कोड है, और इसके परिणामस्वरूप नीचे दी गई छवि है। जैसा कि आप देख सकते हैं, यह किनारों और किनारों के लेबल के चारों ओर थोड़ा भीड़ है, खासकर "^ ए" के आसपास। केवल एक और अधिक जगह बनाने के लिए सबसे अच्छा तरीका क्या है, ताकि कोई स्पष्ट रूप से देख सके कि कौन सा लेबल किनारे से संबंधित है?ग्राफविज़ --- किनारे का लेबल एक और किनारे के करीब है

digraph finite_state_machine {                                             
    pad=0.2; 
    { 
     rank=same; 
     node [shape = point, style = invis]; q_0; 
     node [shape = doublecircle, style = solid]; q_5; 
     node [shape = circle]; 
     q_1 [ label = <<i>q<sub>1</sub></i>> ]; 
     q_2 [ label = <<i>q<sub>2</sub></i>> ]; 
     q_3 [ label = <<i>q<sub>3</sub></i>> ]; 
     q_4 [ label = <<i>q<sub>4</sub></i>> ]; 
     q_5 [ label = <<i>q<sub>5</sub></i>> ]; 
     q_0 -> q_1; 
     q_1 -> q_2 [ label = "." ]; 
     q_1 -> q_2 [ label = <&epsilon;>, constraint=false ]; 
     q_2 -> q_1 [ label = <&epsilon;>, constraint=false ]; 
     q_2 -> q_3 [ label = <<i>a</i>> ]; 
     q_3 -> q_4 [ label = <<i>^a</i>> ]; 
     q_3 -> q_4 [ label = <&epsilon;>, constraint=false ]; 
     q_4 -> q_3 [ label = <&epsilon;>, constraint=false ]; 
     q_4 -> q_5 [ label = <<i>b</i>> ]; 
    } 
} 

enter image description here

+0

मुझे लगता है कि आप अपने किनारों को परिभाषित करते समय 'minlen = 5' सेट करने का प्रयास कर सकते हैं। उदाहरण के लिए - 'q_1 -> q_2 [minlen = 5, लेबल = <ε>, बाधा = झूठी];' – Raj

+0

यह इतना अच्छा काम नहीं करता है। मैंने इसे q4 से q3 तक epsilon किनारे पर करने की कोशिश की। Egde लंबे हो गया, नोड्स के बीच की दूरी बढ़ रही है, लेकिन वास्तव में कोई उच्च नहीं किया गया, इस प्रकार समस्या बनी हुई है। – oskarkv

+1

आप किनारों को किनारों को वक्र करने के लिए बंदरगाहों का उपयोग कर सकते हैं, जैसे: http://stackoverflow.com/questions/18515529/graphviz-place-edge-label-on-the-other-side-ii/18698294#18698294 –

उत्तर

8

Graphviz में कोई attribute बढ़त लेबल चारों ओर मार्जिन/padding समायोजित करने के लिए नहीं है। अंतरिक्ष को मजबूर करने के लिए आपके लेबल के ऊपर/नीचे रिक्त रेखाएं पेश करने के लिए संभवतया आपको जितना संभव हो सके प्रभाव के लिए \n का उपयोग करना है।

जाहिर है, यह स्वचालित रूप से कुछ भी स्केल नहीं करेगा।

वैकल्पिक रूप से, आप कुछ अतिरिक्त स्थान में ranksep विशेषता का उपयोग करने का प्रयास कर सकते हैं।

5

यदि xlabel इसे हल नहीं करता है, तो किसी तालिका में लेबल को लपेटना कभी-कभी काम-आसपास हो सकता है। उदाहरण के लिए:

q_1 -> q_2 [ label = <<table cellpadding="10" border="0" cellborder="0"> 
         <tr><td>&epsilon;</td></tr> 
         </table>>, 
      constraint = false ]; 

एक तरफ एक तरफ अधिक जगह जोड़ने के लिए, आप एक खाली सेल जोड़ सकते हैं। कोड तब जल्दी (अधिक) अपठनीय हो जाता है, लेकिन आप अपनी डॉट फ़ाइल को प्री-प्रोसेस करने के लिए एक सरल sed स्क्रिप्ट का उपयोग कर सकते हैं।

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