12

ネットワーク マップを作成するために、python (v 2.7) で pygraphviz と networkx を使用しようとしています。stackoverflow で非常に便利なスクリプトを見つけました。

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')

最後の行でエラーが発生します。基本的に、neato が見つかりません。

「ValueError: プログラム neato がパスに見つかりません。」

エラーは の agraph.py ファイルをpygraphviz参照していますが、agraph.py を調べても問題の原因となっている可能性のあるものは何も見つかりません。

これを解決する方法はありますか?コーディングに Windows と IDLE を使用しています。ありがとう!

4

5 に答える 5

13

私も同じ問題を抱えていました。他の誰かが pygraphvis を Windows で動作させるのに苦労している場合に備えて、私がしたことは次のとおりです。

まず、graphvizをインストールしました。pip を使用して pygraphvis をインストールしようとしましたが、動作しませんでした。最終的に、非公式の Windows バイナリを見つけたので、それをインストールしました。モジュールのインポートは機能するようになりましたが、呼び出しG.layout()によって上記のエラーが発生しました。

呼び出しneato -Vが機能したため、PATHにありました。問題は、pygraphvisをインストールする前に作成されたコマンドプロンプトでpythonが実行されていたため、PATHが更新されていないことであることがわかりました。コマンドプロンプトを再起動するとこれは修正されましたC:\Programが、有効なコマンドではないという新しいエラーが発生しました。

私は、pygraphvis がパスを正しく引用できていない可能性が高いと考えました。つまり、Program Files のスペースで途切れています。スペースのないパスにシンボリックリンクすることで問題を解決しました。

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

これは管理者モードで実行する必要があることに注意してください。これを行うには、スタート メニューに移動し、cmd と入力してから、Ctrl + Shift + Enter を押します。

この後、PATHを編集してシンボリックリンクを参照し、cmdを再起動すると、すべてが機能しました。

于 2013-06-02T19:09:54.820 に答える
4

問題は、pygraphviz が neato と呼ばれるグラフビズスイートの一部である外部プログラムを呼び出して、グラフを描画することです。何が起こっているかというと、graphviz がインストールされておらず、python がそれを呼び出そうとすると、それが見つからないというエラーが表示されます。実際、pygraphviz は Python 内部から Graphviz を呼び出す可能性を提供するラッパーにすぎませんが、それ自体は何もせず、デフォルトでは Graphviz をインストールしません。

最も簡単な解決策は、ネイトの代わりに別のプロット ソリューションを試すことです。受け入れられるオプションは次のとおりです。

neato
dot
twopi
circo
fdp
nop

それらのいずれかを試して、それらのいずれかが機能するかどうかを確認してください。それ以外の場合は、必要なプログラムを提供するgraphvizをインストールできます。これはすべてのプラットフォームで利用可能なオープンソース プログラムであるため、インストールするのに問題はありません。

http://www.graphviz.org/を参照してください。

グラフのスケッチが必要なだけの場合は、networkx グラフで networkx.draw 関数を使用して、matplotlib を使用してインタラクティブなプロットを作成できます。

import networkx as nx
G = G=nx.from_numpy_matrix(A)
nx.draw(G)
于 2013-02-04T20:31:14.187 に答える
1

このエラーにはおそらく複数の原因がありますが、graphviz モジュールへのパスが見つからないことが原因である場合、[neato,dot,twopi,circo,fdp,nop]私にとってはうまくいったハックが 1 つあります。現在、正しい解決策は何かを尋ねていますが、これを使用できます

if  not 'C:\\Program Files (x86)\\Graphviz2.38\\bin' in os.environ["PATH"]: 
    os.environ["PATH"] += os.pathsep + 'C:\\Program Files (x86)\\Graphviz2.38\\bin' 

スクリプトの先頭に。一般化すると、graphviz ファイルが別の場所に保存されている場合:

graph_path='your_bin_folder_path'
    if  not graph_path in os.environ["PATH"]: 
        os.environ["PATH"] += os.pathsep + graph_path

特に、これは anaconda ナビゲーターと python バージョン 3.7 を使用して Windows 10 で機能しました。

于 2019-11-04T20:57:29.890 に答える