2013-02-04 6 views
7

ausführen Ich versuche, pygraphviz und networkx in Python (v 2.7) zu verwenden, um eine Netzwerkzuordnung zu erstellen. Ich fand ein Skript, das sehr nützlich, auf Stackoverflow aussieht:Wie nato von pygraphviz unter 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') 

ich einen Fehler in der letzten Zeile bekommen, im Grunde kann es nicht neato finden:

"ValueError: Program neato not found in path."

Der Fehler bezieht sich auf die agraph.py Datei für pygraphviz, aber ich kann nichts sehen, das das Problem verursachen könnte, wenn ich durch agraph.py schaue

Irgendwelche Ideen, wie man das löst? Ich verwende Windows und IDLE für meine Codierung. Danke!

Antwort

1

Das Problem ist, dass pygraphviz ein externes Programm aufrufen, ein Teil der Graphviz-Suite namens neato, um das Diagramm zu zeichnen. Was passiert, ist, dass Sie graphviz nicht installiert haben und wenn Python versucht, es aufzurufen, beschwert es sich, es nicht zu finden. Eigentlich ist pygraphviz nur ein Wrapper, der Ihnen die Möglichkeit gibt, graphviz aus dem Inneren von Python aufzurufen, tut aber per se nichts und installiert graphviz nicht standardmäßig.

Die einfachste Lösung ist es, eine andere Lösung für die Handlung anstelle von neato zu versuchen. Die akzeptierte Option sind:

versuchen Sie eine von denen und sehen, ob einer von ihnen funktioniert. Ansonsten können Sie graphviz installieren, das Ihnen das benötigte Programm liefert. Es ist und Open-Source-Programm auf jeder Plattform verfügbar, so sollte es kein Problem sein, es zu installieren.

sehen bei http://www.graphviz.org/

Wenn Sie einfach eine Skizze des Graphen haben müssen Sie die networkx.draw Funktion auf einem NetworkX Diagramm verwenden können, die matplotlib ein interaktives Plot erstellen verwendet.

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

Zuerst, danke für die Antwort. Ich habe graphviz installiert. Jetzt, wenn ich mein Skript ausführe, bekomme ich diesen Fehler: Traceback (letzter Aufruf zuletzt): Datei "C:/Python27/2_5.py", Zeile 22, in G.Draw ('/ tmp/out. png ', format =' png ', prog =' neato ') Datei "C: \ Python27 \ lib \ Site-Pakete \ pygraphviz \ agraph.py", Zeile 1422, in der Zeichnung fh = self._get_fh (Pfad, 'w + b') Datei "C: \ Python27 \ lib \ Site-Pakete \ pygraphviz \ agraph.py", Zeile 1458, in _get_fh fh = Datei (Pfad, Modus = Modus) IOError: [Errno 2] Keine solche Datei oder Verzeichnis: '/tmp/out.png' – Amlanza

+0

Es hat ein Problem beim Erstellen der Datei /tmp/out.png. Dies kann auf das Betriebssystem zurückzuführen sein./tmp ist ein normales Verzeichnis in allen Linux-Distributionen, also muss nur die Datei erstellt werden. Wenn Sie mit Windows arbeiten, ist dieses Verzeichnis wahrscheinlich nicht vorhanden, daher der Fehler (Sie versuchen, die Datei in einem Verzeichnis zu erstellen, das nicht existiert). Wenn Sie es nur mit "out.png" ersetzen, ohne das Verzeichnis anzugeben, sollte es im aktuellen Verzeichnis erstellt werden, ohne sich zu beschweren. Lass es mich wissen, wenn das den Trick macht! – EnricoGiampieri

8

Ich hatte das gleiche Problem. Hier ist, was ich getan habe, falls jemand anderes Schwierigkeiten hat, pygraphvis unter Windows zu bekommen.

Zunächst einmal habe ich Graphviz installiert. Ich habe versucht, pygraphvis thrugh pip zu installieren, aber es hat sich geweigert zu arbeiten. Schließlich habe ich die inoffiziellen Windows-Binärdateien gefunden, also habe ich das installiert. Der Import des Moduls funktioniert jetzt, aber der Aufruf von G.layout() führte zu dem obigen Fehler.

Aufruf neato -V arbeitete, so war es auf meinem Weg. Ich stellte fest, dass das Problem darin bestand, dass Python in einer Eingabeaufforderung ausgeführt wurde, die vor der Installation von pygraphvis erstellt wurde, daher wurde PATH nicht aktualisiert. Neustart der Eingabeaufforderung behoben, aber führte zu einem neuen Fehler, etwas über C:\Program nicht ein gültiger Befehl.

Ich dachte, dass pygraphvis den Pfad wahrscheinlich nicht richtig zitiert hat, was bedeutet, dass er an der Stelle in den Programmdateien abgeschnitten wird. Ich habe das Problem gelöst, indem ich es mit einem Pfad ohne Leerzeichen verknüpft habe.

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

Beachten Sie, dass dies im Administratormodus ausgeführt werden muss. Sie können es tun, indem Sie zum Startmenü gehen, Cmd eingeben und dann Strg + Shift + Enter drücken.

Danach habe ich mein PATH bearbeitet, um auf den Symlink zu verweisen, cmd neu gestartet, und alles hat funktioniert.

+0

das war mein Problem, danke für die Lösung – kifcaliph