2012-09-17 1 views
11

원형 토폴로지가있는 그래프를 그려야합니다. enter image description hereGraphviz : circo 레이아웃이있는 노드를 정렬하는 방법

방법 : 위의 그래프 출력 이미지가 여기

digraph g1 { 
    layout="circo"; 
    node [shape = doublecircle]; N4 N6; 
    node [shape = circle]; 
    N0 -> N1 [ label = "{1,0}"]; 
    N1 -> N2 [ label = "{1,0}"]; 
    N2 -> N3 [ label = "{1,0}"]; 
    N3 -> N4 [ label = "{1,0}"]; 
    N4 -> N5 [ label = "{1,0}"]; 
    N5 -> N6 [ label = "{1,0}"]; 
    N6 -> N0 [ label = "{1,0}"]; 

    N0 -> N4 [ label = "{1,0}"]; 
    N1 -> N5 [ label = "{1,0}"]; 
    N2 -> N6 [ label = "{1,0}"]; 
    N3 -> N0 [ label = "{1,0}"]; 
    N4 -> N1 [ label = "{1,0}"]; 
    N5 -> N2 [ label = "{1,0}"]; 
    N6 -> N3 [ label = "{1,0}"];  
} 

된다 : 여기 enter image description here

내 GV 파일입니다 : 여기

내가보고 기대하고있는 무슨이다 그래프 노드에 노드를 배열하여 1처럼 보이게 할 수 있습니까?

답변

10

목표가 노드의 순서를 따르는 그래프 인 경우 그다지 간단하지 않습니다. 당신은 calculate the position of the nodes with an external script and render it with neato 일 수 있습니다.

digraph g1 { 
    node [shape = doublecircle]; N4 N6; 
    node [shape = circle]; 
    edge[label="{1,0}"]; 
    N0 -> N1 -> N2 -> N3 -> N4 -> N5 -> N6 -> N0; 
} 

과 :

또는 먼저 노드 만의 올바른 순서 결정 가장자리 노드 레이아웃 수

circo graph.gv > tempgraph.gv 

그런 다음 tempgraph.gv에 남아있는 가장자리를 추가하십시오 - 단지 복사 종료 전 다음을 붙여 넣으십시오. } :

N0 -> N4 [ label = "{1,0}"]; 
N1 -> N5 [ label = "{1,0}"]; 
N2 -> N6 [ label = "{1,0}"]; 
N3 -> N0 [ label = "{1,0}"]; 
N4 -> N1 [ label = "{1,0}"]; 
N5 -> N2 [ label = "{1,0}"]; 
N6 -> N3 [ label = "{1,0}"]; 

그리고 neato-n 옵션으로 렌더링 : 당신은 라벨의 위치를 ​​미세 조정 할 수 있습니다

neato -n tempgraph.gv -Tpng -O 

:

circo layout

+0

감사합니다 많이! 그것은 내가 성취하려고 시도한 것입니다. – Filipp

+0

'circo' 명령은 내가 원했던 것이었지만'dot'과'neato' 만 시도 했었는데 이제는 왜 원형 레이아웃을 얻을 수 없는지 알게되었습니다! –

관련 문제