2017-12-16 37 views
3

도트를 사용하여 배열하는 것이 가장 적합한 그래프 지향 그래프가있는 경우 동일한 순위의 다른 노드 주위에 여분의 패딩을 만드는 큰 노드의 문제를 해결할 수있는 방법이 있습니까?Graphviz 도트 배치가 같은 순위에서 다른 크기의 노드로 공간을 낭비하는 것을 방지하려면 어떻게해야합니까?

digraph { 
    b[label="line 1\nline 2\nline 3\nline 4\nline 5\nline 6\n"]; 

    a -> b; 
    a -> c; 
    b -> f; 
    c -> d; 
    d -> e; 
    e -> f; 
} 

(result of the above)

그래프 인해하지 않아도 랭크의 높이를 증가 왼쪽 경로에 필요한 것보다 확실히 더 높다 다음 그래프 예컨대

, 오른쪽 경로에서 너무 커야합니다.

두 경로를 별도로 레이아웃하는 방법이 있습니까? 나는 클러스터 하위 그래프를 사용하는 것이 도움이 될 것이라고 생각했지만, 순위 높이는이 경우에도 완전히 전역으로 보인다. 나는 (그 조잡함의 실례)이 이미지 편집와 유사한 결과를 바라고 있어요

: 해결 방법으로 enter image description here

답변

2

을 당신은 edge[constraint = false];를 추가 할 수 있습니다.
이 모든 가장자리에 대한 constraint 속성 값을 설정합니다 :

Rendered graph

또는 단지 가장자리 중 일부에 대한 constraint 속성을 지정합니다.


편집 : 우리가 서브 그래프의 도움으로 달성 할 수 아주 가까운 결과 :

digraph { 

    rankdir = LR; 

    b[label="line 1\nline 2\nline 3\nline 4\nline 5\nline 6\n"]; 

    subgraph cluster_0 { 

     rank = same; 

     style = invis; 

     a -> c -> d -> e -> f [constraint = false]; 

    } 

    a -> b; 
    b -> f; 

} 

과 같이 표현 될 것인가는 다음과 같습니다

Rendered graph

+0

을 불행하게도에서하지 않는 모두 내가 원하는 것을 다룹니다. 그 결과 모든 노드가 같은 순위로 이동하게되는데, 필요한 것은 노드 'a'에서 노드 'f'까지의 두 경로가 나란히 수직적으로 존재하지만 노드 'b'의 높이가없는 경우입니다. 다른 경로에서 물건의 패딩을 증가시킵니다. 명확한 그림을 포함하도록 질문을 편집했습니다. – Rednaxela

+0

@Rednaxela 답변을 업데이트했습니다. 새 결과는 두 번째 그림과 매우 유사합니다. – user882813

+0

아, 흥미 롭습니다. 이것은 "rankdir = LR"스타일의 그래프를 사용하고 동일한 방식으로 노드가있는 수직 서브 섹션을 만드는 것이 현명한 방법입니다. 이제이 간단한 예제에서 충분히 잘 작동하지만 노드가 세로로 정렬되도록 제한합니다. 나는이 접근법이 더 많은 그래프를 가진 일반화 된 그래프를 더 잘 나타내지는 않는다고 생각한다. – Rednaxela