2011-08-19 286 views
17

Graphvizを使用してフローチャート(Visioと同様)を作成します。ここにサンプルの二重グラフがあります。Graphvizで直線エッジを作成する

digraph start_up { 
node [style = rounded]; 
node [shape = rect] start end; 
node [style = ""]; 
node [shape = diamond] "USB\nCommand\nArrived"; 
start -> "Initialize\nCode"; 
"Initialize\nCode" -> "USB\nCommand\nArrived"; 
"USB\nCommand\nArrived" -> "USB\nCommand\nArrived" [label="No" tailport=w headport=n]; 
"USB\nCommand\nArrived" -> "Has USB 3.0\nInterface Been\nSelected" [label = "Yes"]; 
"Has USB 3.0\nInterface Been\nSelected" -> end 
} 

問題は、私はGraphvizの中でこれをレンダリングする際に"USB\nCommand\nArrived" -> "USB\nCommand\nArrived" [label="No" tailport=w headport=n]; によって作成されたラインはかなり醜いです。私は曲線を気にしませんが、この線は変形して見えます。あなたは、これがよく見えるようにする方法はありGraphvizのがここで作成するもの

を見ることができますか?

答えて

28

例でドットを学ぶのが最善だと思います。私のコメントを読んで、不明な点があれば喜んで答えます。側ノードとして

: graphvizのは、大規模なデータセットのためのグラフを生成するための素晴らしいですが、それはER図、フロー文字およびシーケンス図のようなものを作成するためのあまり驚くばかりです。これは可能であり、比較的単純ですが、Wsywig-GUIモデリングツールを使用して同じ時間を実現することができるため、何かを正しく実行するために必要な時間は不当です。しかし、あなたがそれをやる時間は、(GUIモデリングツールは役に立たない)大きな問題や複雑な問題を視覚化する必要があるときに本当に便利な言語の構文とプロパティを学ぶのに役立ちます。


digraph start_up { 
    { 
/* fake levels (level0 -> level1) and support nodes 
* 
* graphviz to charts is what latex is to documents, 
* sometimes you'll have to fight it. 
* This is typically done by defining levels and connection points that 
* don't really have anything to do with your graph, but are used to 
* force the graph to appear in a certain way. 
*/ 
     node [shape=none, /*label="."*/]; l1a; l2a; l3a; l4a; l5a; l6a; 
     node [shape=square label="no"]; l20a; 
    } 

    { /* connectiong point for the no arrow above "arrived" */ 
     node [width=0 shape=point label=""]; 
     d1; no; 
    } 

    node [style = rounded]; 
    node [shape = rect] start end; 
    node [style = ""]; 

    node [shape = diamond]; { 
     node [label="USB\nCommand\nArrived"]; arrived; 
     node [label="Has USB 3.0\nInterface Been\nSelected"]; selected; 
     node [label="Initialize\nCode"]; init; 
    } 

    start -> init; 
    /*init -> arrived; */ 
    init -> d1 [arrowhead=none]; 
      d1 -> arrived; 

/* 
* tricky part: 
* since nodes in a digrap go either from top to bottom or left to right, we 
* can usually not connect (->) two nodes and have them appear on the same 
* level unless the connection is specified within a block that has the 
* parameter `rank' set to `same' 
*/ 
      l20a->no [arrowhead=none]; 

    { rank=same; no -> arrived [dir=back arrowtail=none]; } 
    { rank=same; l20a -> d1; } 

    /*arrived  -> arrived;*/ /* [label="No" tailport=w headport=n]; */ 
    arrived  -> selected [label = "Yes"]; 
    selected -> end 


    /* just to demonstrate */ 
    l1a-> l2a-> l3a-> l4a-> l5a-> l6a; 
} 

Solution proposal

+0

ところで、[plantUML](http://plantuml.com/)コード関連図を作成するための素晴らしい以上であり、これはgraphvizのに基づいています。 –

関連する問題