2017-04-18 10 views
0

나는 graphviz를 사용하여 파이썬으로 그래프를 그린다. 한 가지 예외는 있습니다. 노드의 위치는 내가 원했던 것이 아니기 때문입니다. 여기 내 예입니다파이썬은 graphviz에서 노드의 위치를 ​​바꾼다

import graphviz as gv 

A=[[1],[2,3,5,7],[4,6,9,10],[8]] 
G=gv.Digraph(format='png',filename='Test') 
for k in range(len(A)-1): 
    for l in A[k]: 
     G.node(str(l)) 
     for m in A[k+1]: 
      if m%l==0: 
       G.edge(str(l),str(m)) 
G.view() 

그리고 그 결과입니다 :

enter image description here

여기 내 문제는 내가 같은 순위의 노드가, 크기로 주문해야 할 것입니다

그래서 "2" 순위 1의 맨 왼쪽 노드 (순위 0부터 시작), "4"는 순위 2의 가장 왼쪽 노드입니다.

답변 해 주셔서 감사합니다!

마틴

+0

나는 이미 이미이 주제에 유래에 질문 몇 가지 유사한 문제가 있다는 것을 알고 추가해야합니다. 그러나, 제 의견으로는,이 질문들 중 어느 것도 나의 필요에 정말로 부합하지 않습니다. 나는 누군가가 벌써 나를 도울 수있는 이미 대답 한 질문을 발견하면 기뻐할 것이다 ... ^^ –

+0

Uhhhm ...여보세요? 거기있는 누군가? ^^ –

답변

1

음, 혼자서 대답을 찾은 것 같습니다. 사실, 나는 이미 존재하는 post의 방법과 함께 직접 Collatz-conjecture 위키 피 디아 페이지에서 영감을 얻은 파이썬으로 .dot 파일을 만들 수 있다는 사실을 사용했다. 마지막으로, 우연히도 graphviz를 설치할 때 레이아웃 엔진을 선택할 수있는 gvedit을 설치했으며 위의 게시물에서 제안하는대로 fdp 또는 neato (둘 다 나와 함께 작업해야 함)가 있어야 함을 발견했습니다. . 여기 내 솔루션입니다 :

A=[[1],[2,3,5,7],[4,6,9,10],[8]] 

dotfile = file('image.dot', 'w') 
dotfile.write('Digraph{\n') 
for k in range(len(A)): 
    for l in range(len(A[k])): 
     dotfile.write(str(A[k][l])+'[pos="'+str(l)+',-'+str(k)+'!"];\n') 
for k in range(len(A)-1): 
    for l in A[k]: 
     for m in A[k+1]: 
      if m%l==0: 
       dotfile.write(str(l)+'->'+str(m)+';\n') 
dotfile.write('}\n') 
dotfile.close() 

ordered