2013-02-04 19 views
7

Sto cercando di utilizzare pygraphviz e networkx in python (v 2.7) per creare una mappa di rete. Ho trovato uno script che sembra molto utile su StackOverflow:Come eseguire neato da pygraphviz su 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') 

ottengo un errore sull'ultima riga, in fondo non riesce a trovare Neato:

"ValueError: Program neato not found in path."

L'errore fa riferimento al file agraph.py per pygraphviz, ma non riesco a vedere nulla che potrebbe causare il problema quando guardo attraverso agraph.py

Qualche idea su come risolvere questo problema? Sto usando Windows e IDLE per la mia codifica. Grazie!

risposta

1

Il problema è che pygraphviz chiama un programma esterno, una parte della suite graphviz chiamata neato, per disegnare il grafico. Quello che sta succedendo è che non hai installato graphviz e quando Python prova a chiamarlo si lamenta di non averlo trovato. In realtà pygraphviz è solo un wrapper che ti dà la possibilità di chiamare graphviz da dentro python, ma di per sé non fa nulla e non installa graphviz di default.

La soluzione più semplice è provare una soluzione diversa per la trama anziché neato. l'opzione accettata è:

neato 
dot 
twopi 
circo 
fdp 
nop 

provare uno di questi e vedere se uno di loro funziona. Altrimenti puoi installare graphviz, che ti darà il programma richiesto. È un programma open source disponibile su ogni piattaforma, quindi non dovrebbe essere un problema installarlo.

vediamo al http://www.graphviz.org/

Se avete semplicemente bisogno di avere uno schizzo del grafico è possibile utilizzare la funzione di networkx.draw su un grafico NetworkX, che matplotlib utilizza per creare una trama interattiva.

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

Innanzitutto, grazie per aver risposto. Ho installato Graphviz. Ora, quando eseguo il mio script ottengo questo errore: Traceback (ultima chiamata ultima): File "C: /Python27/2_5.py", riga 22, in G.draw ('/ tmp/out. png ', format =' png ', prog =' neato ') File "C: \ Python27 \ lib \ site-packages \ pygraphviz \ agraph.py", riga 1422, nel disegno fh = self._get_fh (percorso, 'w + b') File "C: \ Python27 \ lib \ site-packages \ pygraphviz \ agraph.py", riga 1458, in _get_fh fh = file (percorso, modalità = modalità) IOErrore: [Errno 2] Nessun file o directory di questo tipo: '/tmp/out.png' – Amlanza

+0

Ha qualche problema nel creare il file /tmp/out.png. Ciò potrebbe essere dovuto al sistema operativo./tmp è una directory normale in tutta la distribuzione linux, quindi sarà sufficiente creare il file. Se stai lavorando su Windows, quella directory probabilmente non sarà presente, quindi l'errore (stai cercando di creare il file in una directory che non esiste). Se lo sostituisci con solo "" out.png "' senza specificare la directory, dovresti crearlo nella directory corrente senza lamentarti. Fammi sapere se questo fa il trucco! – EnricoGiampieri

8

Ho avuto lo stesso problema. Ecco cosa ho fatto nel caso che qualcun altro stia cercando di far funzionare pygraphvis su Windows.

Prima di tutto, ho installato graphviz. Ho provato a installare pygraphvis thrugh pip, ma si è rifiutato di funzionare. Alla fine, ho trovato i binari non ufficiali di Windows, quindi l'ho installato. L'importazione del modulo ora funziona, ma chiamare G.layout() ha portato all'errore sopra riportato.

Chiamare neato -V ha funzionato, quindi era sul mio PERCORSO. Ho capito che il problema era che Python era in esecuzione in un prompt dei comandi che è stato creato prima di installare pygraphvis, quindi PATH non è stato aggiornato. Il riavvio del prompt dei comandi lo ha corretto, ma ha portato a un nuovo errore, qualcosa su C:\Program non essendo un comando valido.

Ho immaginato che probabilmente Pygraphvis non riuscisse a citare correttamente il percorso, il che significa che si interrompe nello spazio in Programmi. Ho risolto il problema associandolo a un tracciato senza spazi.

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

Si noti che questo deve essere eseguito in modalità amministratore. Puoi farlo andando al menu di avvio, digitando cmd, quindi premendo Ctrl + Maiusc + Invio.

Dopo questo, ho modificato il mio PERCORSO per fare riferimento al link simbolico, al riavvio di cmd e tutto ha funzionato.

+0

questo è stato il mio problema grazie per averlo risolto – kifcaliph

Problemi correlati