2016-09-09 20 views
13

Tôi đang cố gắng để vẽ một số DAG sử dụng networkx 1.11 nhưng tôi phải đối mặt với một số lỗi, đây là thử nghiệm:AttributeError: đối tượng 'module' không có thuộc tính 'graphviz_layout' với networkx 1.11

import networkx as nx 

print nx.__version__ 

G = nx.DiGraph() 
G.add_node(1,level=1) 
G.add_node(2,level=2) 
G.add_node(3,level=2) 
G.add_node(4,level=3) 

G.add_edge(1,2) 
G.add_edge(1,3) 
G.add_edge(2,4) 

import pylab as plt 
nx.draw_graphviz(G, node_size=1600, cmap=plt.cm.Blues, 
       node_color=range(len(G)), 
       prog='dot') 
plt.show() 

Và đây là traceback:

Traceback (most recent call last): 
    File "D:\sources\personal\python\framework\stackoverflow\test_dfs.py", line 69, in <module> 
    prog='dot') 
    File "d:\virtual_envs\py2711\lib\site-packages\networkx\drawing\nx_pylab.py", line 984, in draw_graphviz 
    pos = nx.drawing.graphviz_layout(G, prog) 
AttributeError: 'module' object has no attribute 'graphviz_layout' 

tôi đang sử dụng python 2.7.11 x64, networkx 1.11 và tôi đã cài đặt graphviz-2.38dot sẵn trong PATH. Tôi đang thiếu gì?

Khi nó hoạt động, làm thế nào tôi có thể vẽ đồ thị với các nút đó:

  • màu Sử dụng nền trắng
  • Có nhãn bên
  • mũi tên đã chỉ đạo
  • được bố trí độc đáo hoặc là tự động hoặc bằng tay

Tương tự như hình ảnh dưới đây

enter image description here

Như bạn có thể thấy trong hình ảnh đó, các nút được liên kết thực sự độc đáo

+0

Sử dụng một trong hai 'nx.graphviz_layout' hoặc 'nx.drawing.nx_agraph.graphviz_layout'. –

+0

@ValentinLorentz Khi thử 'nx.graphviz_layout', tôi sẽ nhận được đối tượng' AttributeError: 'module' không có thuộc tính 'graphviz_layout'' nhưng sử dụng 'nx.drawing.nx_agraph.graphviz_layout' kinda hoạt động. Mặc dù không phải 'nx.graphviz_layout (G, prog = 'chấm') hay nx.drawing.nx_agraph.graphviz_layout (G)' đều hiển thị bất kỳ thứ gì. Nếu bạn có thể cung cấp một ví dụ mcve này tôi có thể xác nhận câu trả lời của bạn, cảm ơn! – BPL

+0

Làm thế nào để bạn có được đồ thị để có chủ đề đó, với các nhãn trong các nút? – Arya

Trả lời

21

Cách bố trí gói đã thay đổi trong các phiên bản sau này của networkx. Bạn có thể nhập hàm graphivz_layout một cách rõ ràng.

import networkx as nx 
import pylab as plt 
from networkx.drawing.nx_agraph import graphviz_layout 


G = nx.DiGraph() 
G.add_node(1,level=1) 
G.add_node(2,level=2) 
G.add_node(3,level=2) 
G.add_node(4,level=3) 

G.add_edge(1,2) 
G.add_edge(1,3) 
G.add_edge(2,4) 

nx.draw(G, pos=graphviz_layout(G), node_size=1600, cmap=plt.cm.Blues, 
     node_color=range(len(G)), 
     prog='dot') 
plt.show() 

enter image description here

+0

Graphviz có thể làm những gì bạn muốn. Cảm ơn bạn đã bỏ phiếu nhưng thay đổi câu hỏi sau khi câu trả lời được đưa ra không phải là quá tốt đẹp http://meta.stackoverflow.com/questions/296489/when-is-it-ok-to-extend-a-question-with- câu hỏi khác-câu hỏi-sau-ban đầu – Aric

+0

Bạn nên trao tiền thưởng để trả lời câu hỏi của bạn như ban đầu được đặt ra. Tôi có thể trả lời câu hỏi tiếp theo của bạn nhưng câu hỏi này khác với câu hỏi ban đầu của bạn. – Aric

+0

Một thay đổi nhỏ @Aric: Khi sử dụng 'graphviz_layout' một cách rõ ràng, đối số' prog = 'cần được chuyển đến' graphviz_layout', không phải '.draw'. Nếu không '' neato ''được giả định (theo tài liệu). –

Các vấn đề liên quan