2017-11-15 18 views
0

Graphviz를 처음 접했습니다. 내 질문이 너무 나쁘면 미안 해요.Graphviz : 고정 노드 위치를 얻는 방법

도트에서 고정 위치에있는 노드가있는 여러 개의 이미지가 있지만 서로 다른 호가 있습니다. 그러나 아크 구성의 사소한 수정조차도 레이아웃에서 큰 차이를 만듭니다. 일부 회피책을 발견했습니다 (특정 헤지스를 보이지 않게 유지하거나 "뒤로"옵션 사용). 그러나 한 가지 원호 방향 만 수정하면 완전히 다른 레이아웃을 제공하는 이와 같은 상황을 피하기위한보다 우아한 방법이 있는지 궁금합니다.

예를 들어, 참조 :

digraph exempleUPFM { 
label=mylab; 
ratio = 0.5; 
spline = line; forcelabels=true; 
node [shape = circle;style=filled; color=lightgrey;]; 
1 [xlabel="10" fontcolor= blue group=g1]; 
4 [xlabel="-6" fontcolor= red group=g1]; 
2 [xlabel="4" fontcolor= blue group=g2]; 
5 [xlabel="-8" fontcolor= red group=g2]; 
node [shape = circle; style=""] 
{rank=same; 1 2} 
{rank=same; 4 5} 
1 -> 2 [label=" 1"] 
1 -> 3 [label=" 8"] 
1 -> 4 [label=" 1"] 
2 -> 3 [label=" 2"] 
3 -> 4 [label=" 1"] 
3 -> 5 [label=" 4"] 
4 -> 5 [label=" 12"] 
5 -> 2 [label=" -7"] 
} 

또는 이러한 특정 경우 이것은

digraph exemple2UPFM { 
label=mylab; 
ratio = 0.5; 
spline = line; forcelabels=true; 
node [shape = circle;style=filled; color=lightgrey;]; 
1 [xlabel="10" fontcolor= blue group=g1]; 
4 [xlabel="-6" fontcolor= red group=g1]; 
2 [xlabel="4" fontcolor= blue group=g2]; 
5 [xlabel="-8" fontcolor= red group=g2]; 
node [shape = circle; style=""]; 
{rank=same; 1 2} 
{rank=same; 4 5} 
1 -> 2 [label=" 1"] 
1 -> 3 [label=" 8"] 
1 -> 4 [label=" 1"] 
2 -> 3 [label=" 2"] 
3 -> 4 [label=" 1"] 
3 -> 5 [label=" 4"] 
5 -> 4 [label="-12"] 
5 -> 2 [label=" -7"] 
} 

을, 유일한 차이점은도 5 및 제하지만 그래프에서의 차이 간의 호 방향은 레이아웃은 잔인합니다. 두 번째 예에서 원호 4 -> 5를 유지하고 "뒤로"옵션을 추가하면 레이아웃이 원본으로 돌아옵니다.

왜 이런 단서가 있으며, 최소 아크 수정시 노드의 위치가 바뀌지 않도록하는 방법이 있습니까?

도움 주셔서 감사합니다.

답변

1

graphviz 그래프를 어떻게 보이게할지 모릅니다. 그것은 당신이 제공 한 지침에 따라 그것을 수치. 기본 레이아웃 (위에서 아래로)에서 A -> B이라고 말하면 첫 번째 노드를 두 번째 노드의 맨 위에 놓고 동일한 순위 인 경우 첫 번째 노드를 두 번째 노드의 왼쪽에 놓습니다. "잔인하게"변경된 레이아웃을 보면 로직을 볼 수 있습니다.

첫 번째 목록의 노드 정렬을 유지하려면 두 경우 모두 2 -> 5[ dir = back ]이라고 말하는 것이 더 안전하며 4 -> 5[ dir = back ]은 놀랄 일이 아닙니다. graphviz '논리를 염두에두면 대부분의 경우 레이아웃을 정렬 할 수 있습니다. 보이지 않는 노드와 가장자리 또는 가장자리에 가중치를 추가하는 것은 다음 단계입니다.

은 그냥 설명하기 :

digraph exempleSO 
{ 
    label=mylab; 
    ratio = 0.5; 
    spline = line; 
    forcelabels=true; 

    node [shape = circle;style=filled; color=lightgrey;]; 
    1 [xlabel="10" fontcolor= blue group=g1]; 
    4 [xlabel="-6" fontcolor= red group=g1]; 
    2 [xlabel="4" fontcolor= blue group=g2]; 
    5 [xlabel="-8" fontcolor= red group=g2]; 

    node [shape = circle; style=""] 
    {rank=same; 1 2} 
    {rank=same; 4 5} 
    1 -> 2 [label=" 1"] 
    1 -> 3 [label=" 8"] 
    1 -> 4 [label=" 1"] 
    2 -> 3 [label=" 2"] 
    3 -> 4 [label=" 1"] 
    3 -> 5 [label=" 4"] 
    4 -> 5 [dir = back, label=" 12 back"] 
    2 -> 5 [dir = back, label=" -7 back"] 
} 

enter image description here

+0

감사를 얻을 수 있습니다. 내 메시지에 썼 듯이, 초기 투쟁 끝에 "뒤로"옵션이 레이아웃을 원하는 위치로 되돌려 놓았다는 것을 알게되었습니다. 왜 이제야 나는 기본 설정과 관련 동작에 대해 알지 못했습니다. – macadamianut

+0

내 대답을 정답/upvote로 표시하는 것이 좋고 공정 할 것입니다. 감사합니다 ... – vaettchen

+0

안녕하세요, 미안 해요, vaettchen! 예, 당신의 대답은 매우 귀중했고 많은 도움이되었습니다. – macadamianut