2013-02-04 40 views
7

Tôi đang cố gắng sử dụng pygraphviz và networkx trong python (v 2.7) để tạo một bản đồ mạng. Tôi tìm thấy một kịch bản trông rất hữu ích trên stackoverflow:Làm thế nào để chạy neato từ pygraphviz trên Windows

import networkx as nx 
import numpy as np 
import string 
import pygraphviz 

dt = [('len', float)] 
A = np.array([(0, 0.3, 0.4, 0.7), 
       (0.3, 0, 0.9, 0.2), 
       (0.4, 0.9, 0, 0.1), 
       (0.7, 0.2, 0.1, 0) 
       ])*10 
A = A.view(dt) 

G = nx.from_numpy_matrix(A) 
G = nx.relabel_nodes(G, dict(zip(range(len(G.nodes())),string.ascii_uppercase)))  

G = nx.to_agraph(G) 

G.node_attr.update(color="red", style="filled") 
G.edge_attr.update(color="blue", width="2.0") 

G.draw('/tmp/out.png', format='png', prog='neato') 

tôi nhận được một lỗi trên dòng cuối cùng, về cơ bản nó không thể tìm thấy neato:

"ValueError: Program neato not found in path."

Các lỗi liên quan đến file agraph.py cho pygraphviz, nhưng tôi không thể thấy bất kỳ điều gì có thể gây ra sự cố khi tôi xem qua agraph.py

Bất kỳ ý tưởng nào giải quyết vấn đề này? Tôi đang sử dụng các cửa sổ và IDLE cho mã hóa của tôi. Cảm ơn!

Trả lời

1

Vấn đề là pygraphviz gọi một chương trình bên ngoài, một phần của bộ graphviz được gọi là neato, để vẽ biểu đồ. Điều gì đang xảy ra là bạn không có graphviz cài đặt và khi python cố gắng gọi nó nó phàn nàn về việc không tìm thấy nó. Trên thực tế pygraphviz chỉ là một wrapper cung cấp cho bạn khả năng gọi graphviz từ bên trong python, nhưng mỗi se không làm bất cứ điều gì và không cài đặt graphviz theo mặc định.

Giải pháp dễ nhất là thử một giải pháp khác cho cốt truyện thay vì gọn gàng. tùy chọn được chấp nhận là:

neato 
dot 
twopi 
circo 
fdp 
nop 

hãy thử một trong số đó và xem một trong số đó có hoạt động hay không. Nếu không, bạn có thể cài đặt graphviz, điều đó sẽ cung cấp cho bạn chương trình được yêu cầu. Đó là chương trình nguồn mở có sẵn trên mọi nền tảng, do đó, nó không phải là một vấn đề để cài đặt nó.

thấy tại http://www.graphviz.org/

Nếu bạn chỉ đơn giản là cần phải có một phác thảo của đồ thị, bạn có thể sử dụng chức năng networkx.draw trên một đồ thị networkx, có sử dụng matplotlib để tạo ra một cốt truyện tương tác.

import networkx as nx 
G = G=nx.from_numpy_matrix(A) 
nx.draw(G) 
+0

Trước tiên, cảm ơn bạn đã trả lời. Tôi đã cài đặt graphviz. Bây giờ, khi tôi chạy tập lệnh của mình, tôi nhận được lỗi này: Traceback (cuộc gọi gần đây nhất): Tệp "C: /Python27/2_5.py", dòng 22, trong G.draw ('/ tmp/out. png ', format =' png ', prog =' neato ') Tệp "C: \ Python27 \ lib \ site-packages \ pygraphviz \ agraph.py", dòng 1422, trong hình vẽ fh = self._get_fh (đường dẫn, 'w + b') Tệp "C: \ Python27 \ lib \ site-packages \ pygraphviz \ agraph.py", dòng 1458, trong _get_fh fh = tệp (đường dẫn, chế độ = chế độ) IOError: [Errno 2] Không có tệp hoặc thư mục nào như vậy: '/tmp/out.png' – Amlanza

+0

Có sự cố khi tạo tệp /tmp/out.png. Điều này có thể là do hệ điều hành./tmp là một thư mục bình thường trong tất cả các bản phân phối Linux, vì vậy nó sẽ chỉ cần tạo tập tin tha. Nếu bạn đang làm việc trên các cửa sổ thư mục có thể sẽ không có mặt, do đó lỗi (bạn đang cố gắng tạo tệp trong một thư mục không tồn tại). Nếu bạn thay thế nó chỉ bằng '" out.png "' mà không chỉ rõ thư mục, nó sẽ tạo nó trong thư mục hiện tại mà không cần phàn nàn. Hãy cho tôi biết nếu điều này làm các trick! – EnricoGiampieri

8

Tôi gặp vấn đề tương tự. Đây là những gì tôi đã làm trong trường hợp bất cứ ai khác đang đấu tranh để có được pygraphvis làm việc trên Windows.

Trước hết, tôi đã cài đặt graphviz. Tôi đã cố gắng để cài đặt pipgraphvis thrugh pip, nhưng nó từ chối làm việc. Cuối cùng, tôi đã tìm thấy các tệp nhị phân Windows không chính thức, vì vậy tôi đã cài đặt nó. Nhập mô-đun hiện hoạt động, nhưng gọi số G.layout() dẫn đến lỗi trên.

Gọi neato -V đã hoạt động, vì vậy nó đã có trên PATH của tôi. Tôi đã tìm ra rằng vấn đề là python đang chạy trong một dấu nhắc lệnh đã được tạo trước khi cài đặt pygraphvis, vì vậy PATH không được cập nhật. Khởi động lại dấu nhắc lệnh đã sửa lỗi này, nhưng dẫn đến một lỗi mới, một cái gì đó về C:\Program không phải là một lệnh hợp lệ.

Tôi nhận ra rằng pygraphvis có thể không báo giá đường dẫn chính xác, có nghĩa là nó cắt bỏ ở khoảng trống trong Program Files. Tôi giải quyết vấn đề bằng cách liên kết nó với đường dẫn không có dấu cách.

mklink /d C:\ProgramFilesx86 "C:\Program Files (x86)" 

Lưu ý rằng điều này phải được chạy trong chế độ quản trị. Bạn có thể làm điều đó bằng cách vào menu bắt đầu, gõ cmd, và sau đó nhấn Ctrl + shift + enter.

Sau này, tôi đã chỉnh sửa PATH của mình để tham chiếu đến liên kết tượng trưng, ​​khởi động lại cmd và mọi thứ đã hoạt động.

+0

đó là vấn đề của tôi cảm ơn bạn đã giải quyết nó – kifcaliph

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