2010-01-19 8 views
9

मेरे पास एक टेस्ट ग्राफ़ है कि मैं इसे अच्छे दिखने के लिए ट्विक करना चाहता हूं।ग्राफ़विज़: ग्राफ़ को देखने के लिए मामूली tweaks nicer

alt text

यहाँ Graphviz है (डॉट) स्रोत, test6.dot:

digraph G { 
    ranksep=0.3; size="6.0,6.0"; 
    node [fontsize=11]; 

    subgraph clusterA { 
     X2 [shape=box]; 

     node [style=filled]; 
     1 -> 2 -> 3 -> X2 -> 5; 
     6; 
     7; 
     label = "A"; 
     color=blue 
    } 
    X1 [shape=box]; 
    subgraph clusterB { 
     node [style=filled]; 
     8; 
     9; 
     10 -> 11 -> 12; 
     12 -> 9; 
     12 -> 8 -> 13; 
     13 -> 14; 
     label = "B"; 
     color=blue 
    } 
    subgraph clusterC { 
     label = "C"; 
     { 
     node [style="invis"]; 
     gap; 
     } 
     node [shape=box]; 

     edge [style="invis"]; 
     X3 -> gap -> X4;   
    } 

    14 -> X4 -> 3; 
    6 -> X1 -> 10; 
    { edge [dir="both"]; 
     8 -> X3 -> 7; 
    } 

    9 -> X3 
    } 

प्रश्न/परिवर्तन मैं चाहते हैं बनाने के लिए:

  • मैं करने के लिए नोड्स 10 -> 11 -> 12 -> 8 -> 13 -> 14 के प्रवाह चाहते हैं एक ऊर्ध्वाधर रेखा में हो (क्षैतिज 8 और 9 स्वैप करें)। मैं यह कैसे कर सकता हूँ? (1 -> 2 -> 3 -> X2 -> 5 के साथ; स्वैप 6 और 1)
  • मैं चाहता हूं कि एक्स 1 समान ऊर्ध्वाधर स्थिति पर 10 के रूप में हो, और 6 के समान क्षैतिज स्थिति हो। मैं यह कैसे कर सकता हूं?
  • मैं 8 और एक्स 3 और 7 को समान लंबवत स्थिति में होना चाहता हूं, 14 और एक्स 4 और 3 के साथ भी। मैं यह कैसे कर सकता हूं?
  • ranksep=0.3; कथन महान काम करता है, ध्यान दें कि 8 -> 13 -> 14 में X3 -> gap -> X4 जैसा बड़ा अंतर है। यह रैंकसेप = 0.3 नियम का पालन क्यों नहीं करता है, और मैं इसे कैसे ठीक करूं?

उत्तर

17

नीचे सबसे अच्छा मैं कर सकता हूं: प्रेत नोड्स और किनारों की सहायता करें। लेकिन मैं अनुप्रस्थ दिशा (रैंकडीर से दूसरी दिशा) में एक विशेष आदेश को प्रोत्साहित नहीं कर सकता।

alt text

digraph G { 
    ranksep=0.3; size="6.0,6.0"; 
    rankdir=TB; 

    node [fontsize=11]; 

    subgraph clusterA { 
     X2 [shape=box]; 
     label = "A"; 
     color=blue; 

     node [style=filled]; 
     /* force 1, 6, and 7 to be at the top together, 
      add enough phantoms to keep things in nice columns */ 
     { 
      node [style="invis", label=""]; 
      phantom3; 
      phantom4; 
      phantom5; 
      phantom6; 
     } 


      rank = same; 
      1 -> 2 -> 3 -> X2 -> 5;   

      edge [style="invis"]; 
      6 -> phantom3 -> phantom5; 
      7 -> phantom4 -> phantom6; 

    } 
    subgraph clusterB { 
     node [style=filled]; 
     label = "B"; 
     color=blue; 
     /* create an invisible phantom node 
      to take up space */ 
     { 
     node [style="invis",label=""]; 
     phantom1; 
     phantom1b; 
     } 

     { rank=same; 11; 
     phantom1; 
     } 

     10 -> 11 -> 12 -> 8 -> 13 -> 14; 
     12 -> 9; 
     phantom1 -> 9 -> phantom1b [style="invis"]; 

    } 


    /* force X1 to be at the same vertical pos as 10 
     (this yields a warning though) */ 
    { rank = same; 
     X1 [shape=box]; 
     10; 
    } 

    6 -> X1; 
    X1 -> 10 [weight=0.5]; 

    subgraph clusterC { 
     label = "C"; 

     phantom2 [style="invis", label=""]; 

     node [shape=box]; 

     edge [style="invis"]; 
     X3 -> phantom2 -> X4;   
    } 

    9 -> X3 [weight=0.5]; 

    { 
     edge [weight=20]; 
     14 -> X4 -> 3; 
     3 -> X4 -> 14 [style="invis"]; 
     /* add a reverse path so graphviz doesn't force 14 above X4 above 3 */ 
    } 
    { 
     edge [dir="both", weight=20]; 
     8 -> X3 -> 7; 
     7 -> X3 -> 8 [style="invis"]; 
     edge [style="invis"]; 
     X4 -> phantom6; 
     1 -> phantom2; 
     8 -> phantom2; 
    } 

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