2014-03-04 83 views
6

我正在嘗試使用點(版本2.28.0)爲了使我的源代碼的流程圖。爲此,我希望圖形由子圖組成,其中每個子圖代表代碼庫中的源文件。在每個子圖的頂部,應該將文件名稱作爲節點以易於區分的方式顯示(即深藍色背景上的粗體,白色文本)。文件名節點下面應該是代表該文件中例程流程的節點,它們按照它們被調用的順序。graphviz/dot:兩個節點之間的距離是否可以單獨設置?

我現在的問題是,我希望「文件名節點」和「例程節點」之間的距離小於各個「例程節點」之間的距離,再加上,之間不應該有箭頭。

我試圖將minlen屬性用於將「文件名節點」連接到第一個「例程節點」的邊緣,但是當我將它設置爲低於1.0的值時,兩個節點彼此相鄰,而不是堆疊。

有沒有什麼辦法可以使前兩個節點比另外兩個節點彼此接近,但是頂部/底部導向?

digraph "prog.c" 
{ 
    edge [fontname="FreeSans",fontsize="12",labelfontname="FreeSans",labelfontsize="10"]; 
    node [fontname="FreeSans",fontsize="14",shape=record,height=0.2]; 
    compound=true; 

    subgraph cluster_main { 
     Node1_0 [label="main.c", shape=folder, fontcolor="white", style=filled, fillcolor="#00008b"]; 
     Node1_1 [label="routine1()"]; 
     Node1_2 [label="routine2()"]; 
     edge [color="transparent", minlen="0.5"]; // stacking not ok 
     // edge [color="transparent", minlen="1.0"]; // stacking ok 
     Node1_0 -> Node1_1 ; 
     edge [color="black", minlen="1.0"]; 
     Node1_1 -> Node1_2 ; 
    } 
} 

編輯:我應該註釋掉這導致令人失望的結果,而不是一條通往希望的結果(我曾計劃連接兩個PNG文件的澄清,但我不允許這樣做行所以作爲一個新手);所以這裏是我實際上想要修改的代碼,前兩個節點與最後兩個節點的距離不同(較小)。

digraph "prog.c" 
{ 
    edge [fontname="FreeSans",fontsize="12",labelfontname="FreeSans",labelfontsize="10"]; 
    node [fontname="FreeSans",fontsize="14",shape=record,height=0.2]; 
    compound=true; 

    subgraph cluster_main { 
     Node1_0 [label="main.c", shape=folder, fontcolor="white", style=filled, fillcolor="#00008b"]; 
     Node1_1 [label="routine1()"]; 
     Node1_2 [label="routine2()"]; 
     //edge [color="transparent", minlen="0.5"]; // stacking not ok 
     edge [color="transparent", minlen="1.0"]; // stacking ok 
     Node1_0 -> Node1_1 ; 
     edge [color="black", minlen="1.0"]; 
     Node1_1 -> Node1_2 ; 
    } 
} 

回答

7

有幾個「圖」屬性可以控制你所需要的。 墊,ranksep,nodesep

另外,我增加了您的節點的大小,但只爲我自己的易用性......

digraph "prog.c" 
{ 
    graph [pad=".75", ranksep="0.25", nodesep="0.25"]; 
    node [fontname="FreeSans",fontsize="14",shape=record,width=2, height=.5]; 
    edge [fontname="FreeSans",fontsize="12",labelfontname="FreeSans",labelfontsize="10"]; 

    compound=true; 

    subgraph cluster_main { 
     Node1_0 [label="main.c", shape=folder, fontcolor="white", style=filled, fillcolor="#00008b"]; 
     Node1_1 [label="routine1()"]; 
     Node1_2 [label="routine2()"]; 
     edge [color="transparent", minlen="0.5"]; // stacking not ok 
     // edge [color="transparent", minlen="1.0"]; // stacking ok 
     Node1_0 -> Node1_1 ; 
     edge [color="black", minlen="1.0"]; 
     Node1_1 -> Node1_2 ; 
    } 
} 
+2

它是如何回答這個問題? – Math

+0

對不起,不清楚。通過將「ranksep」增加到更大的值,這些例程將分開得更遠。 – OldDogNewTricks

+0

我錯過了問題答案的重要部分,即使它確實有幫助。 – pwagner