2013-02-18 41 views
12

khi tôi chuyển ma trận kề nhau nhiều bít tới networkx (sử dụng hàm from_numpy_matrix) và sau đó thử vẽ đồ thị bằng matplotlib, nó bỏ qua nhiều cạnh.cách vẽ đa hình trong networkx bằng matplotlib hoặc graphviz

làm cách nào để tôi có thể vẽ nhiều cạnh?

+0

liên quan http://stackoverflow.com/questions/10379448/plotting-directed-graphs-in-python-in- a-way-that-show-all-edge-riêng biệt và http://stackoverflow.com/questions/15053686/networkx-overlapping-edges-when-visualizing-multigraph –

+0

Quá xấu nó không được thực hiện trong networkx! – famargar

Trả lời

12

Graphviz thực hiện tốt công việc vẽ các cạnh song song. Bạn có thể sử dụng nó với NetworkX bằng cách viết một tệp dấu chấm và sau đó xử lý bằng Graphviz (ví dụ: bố cục gọn gàng bên dưới). Bạn sẽ cần pydot hoặc pygraphviz ngoài NetworkX

In [1]: import networkx as nx 

In [2]: G=nx.MultiGraph() 

In [3]: G.add_edge(1,2) 

In [4]: G.add_edge(1,2) 

In [5]: nx.write_dot(G,'multi.dot') 

In [6]: !neato -T png multi.dot > multi.png 

enter image description here

On NetworkX 1.11 và mới hơn, nx.write_dot không hoạt động theo issue on networkx github. Cách giải quyết là để gọi write_dot sử dụng

from networkx.drawing.nx_pydot import write_dot

hoặc

from networkx.drawing.nx_agraph import write_dot

+0

bạn đang sử dụng phiên bản networkx, pygraphviz và graphviz nào? – eyaler

+0

Đây là những gì tôi có. Nhưng các bản khảo sát gần đây sẽ cho kết quả tương tự. $ python -c "nhập khẩu pygraphviz; in pygraphviz .__ version__" 1.2.dev1990 $ rải rác -V dot - phiên bản graphviz 2.29.20120625.0446 (20120625,0446) $ python -c "nhập khẩu networkx; in networkx .__ version__ " 1.8.dev_20130108070258 – Aric

+0

Tôi đã viết cùng một mã, sử dụng gọn gàng để tạo ra hình ảnh đồ thị, nhưng nó là một đồ thị hướng (và không phải là không bị hướng dẫn) và chỉ hiển thị một cạnh (1,2) nhưng không cạnh (2, 1). Tại sao không phải là vô hướng ????? Và tại sao không có cạnh khác ?? Xin vui lòng giúp đỡ! –

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