2010-03-19 6 views
36

graphviz (점)를 사용하여 아래 그래프를 생성합니다. 왼쪽 하단 모서리 (빨간색 타원)의 노드는 가장자리가 인접한 노드의 여러 가장자리를 가로 지르면서 성가심을 유발합니다. 노드 배치를 특정 영역으로 제한하는 방법이 있습니까? 당신의 아이디어에 대한graphviz에서 노드 배치를 제어하는 ​​방법 (예 : 가장자리 교차 방지)

덕분에

graph with edge crossing several other edges http://i39.tinypic.com/e6od8z.png

답변

9

나는 개별 노드의 위치를 ​​제어 할 수있는 모든 수단을 잘 모르는 것 같아요. 그것은 실제로 의미가 없습니다. 왜냐하면 마지막 그래프가 어떻게 보이는지 알 필요가 있지만, 수동으로 하나의 노드를 배치하면 나머지 그래프가 렌더링되는 방식이 변경되기 때문입니다.

내 노드가 .dot 파일에 정의 된 순서를 변경하고 그래프 수준에서 nodesepranksep 속성을 조정하여이 문제를 해결했습니다. 그것은 정교하게 진행되는 과정입니다. 한 번에 몇 가지를 수정하면 올바르게 보입니다.

당신은 또한 다음의 Visio로 가져 (또는 다른 편집기) 수동 당신이 행복하지 않은 노드를 재 배열, SVG로 그래프를 렌더링 할 수 있습니다.

+1

Visio가 일반 svg를 편집 할 수는 없지만 Inkscape는 수정할 수 있다고 생각합니다. –

+0

@GringoSuave : 실제로 Inkscape는 가능하지만 노드를 이동하면 가장자리가 따라 가지 않습니다. 이것은 노드를 거의 제외하고는 실용적이지 못합니다. –

+2

이것은 올바르지 않으며 허용되는 대답이 아니어야합니다. 아래에는 30 개와 20 개의 투표로 각각 답안을 수락 할 수 있습니다. –

22

@Jannis은, 경우에 당신은 여전히이에 대한 답변에 관심이, 개별 노드 위치를 제어 할 수있는 방법 실제로이 - 당신은 "POS"속성 사용

http://www.graphviz.org/doc/info/attrs.html#d:pos

을 이것의 예를 들어, 당신은 쓸 수 : 정확하게 (3,5)에있을 노드 n을 강제

n [pos="3,5!"]; 

합니다.

그러나 이것은 단지 레이아웃 엔진 "FDP"와 "니토 '와 함께 작동합니다.

+18

'pin' 속성 (!)은 "fdp, neato only"입니다 (점으로는 작동하지 않습니다). 따라서 점 배치 엔진을 우회하지 않는 한'pos'를 사용하는 것은 의미가 없습니다. – nobar

+1

@nobar : 흠, 설명서를 다시 보면 네가 옳은 것 같아 .- 나쁘다, 미안. –

+0

나는 그것을 알아 차렸다! 비록 neato와 함께 작동하지만 fdp에서도 작동하지 않습니다. 또한 "pos"속성 (기본 72.0)에 주어진 좌표의 배율을 관리해야하는 -s 인수가 작동하지 않는 것 같습니다 (segfault가 발생 함). 요약하자면 :'pos' 속성의 모든 숫자를 72.0으로 나누고'neato' 작품을 사용하십시오! –

35

당신은, 눈에 보이지 않는 제약 조건을 만들 수있는 빨간색 노드가 다른 모든 노드의 왼쪽에 표시하게 할 수 있습니다.

redNode -> leftmostNode [style=invis]; 

전 :

before

후 :

after

+1

그게 내 문제를 해결했습니다. 나는 다른 무언가의 다른면에 나타날 무언가를 원했습니다. 고맙습니다. –

5

내가 가장자리를 추가하여 당신이 그들을 원하는 것들을 넣어은 GraphVIZ을 설득하기위한 @smokris '[style=invis] 트릭을 좋아한다 레이아웃에 영향을 주지만 보이지는 않습니다.


또 다른 트릭은 당신이 볼 수 있지만 레이아웃에 영향을주지 않는 가장자리를 추가 할 수 constraint attribute입니다.

새 가장자리를 추가하면 그래프가 엉망이됩니다. 그 가장자리에 [constraint=false]을 설정하십시오. 노드를 배치 할 때 graphviz가이를 무시합니다.

false 인 경우 노드의 순위 지정에 가장자리가 사용되지 않습니다.예를 들어, 그래프 에

digraph G { 
    a -> c; 
    a -> b; 
    b -> c [constraint=false]; 
} 

에지 b -> c는 순위 지정 동안에 제한을 추가하지 않으므로 유일한 제약은 그래프 수득 B 및 C 위의 것이있다 :

관련 문제