2016-02-08 22 views
26

私はいくつかのPythonグラフの視覚化を学んでいます。私はいくつかのブログの投稿を行うことを見つけたsomethings私は試してみたかった。残念ながら、私はこのエラーに遭遇した、あまりにも遠く取得していない:は私のシステムでエラーを再現するコードのAttributeError: 'module' object has no attribute 'graphviz_layout'NetworkXとPyGraphVizは単独では動作しますが、一緒には動作しません。

最も簡単なスニップはこれです、

In [1]: import networkx as nx 
In [2]: G=nx.complete_graph(5) 
In [3]: nx.draw_graphviz(G) 
------------------------------------------------------------ 
AttributeError Traceback (most recent call last) 
<ipython-input-3-481ad1c1771c> in <module>() 
----> 1 nx.draw_graphviz(G) 
/usr/lib/python2.7/site-packages/networkx/drawing/nx_pylab.pyc in draw_graphviz(G, prog, **kwargs) 
982 See networkx.draw_networkx() for a description of optional keywords. 
983 """ 
--> 984 pos = nx.drawing.graphviz_layout(G, prog) 
985 draw(G, pos, **kwargs) 
986 
AttributeError: 'module' object has no attribute 'graphviz_layout' 

は、私は同様のquestionsを見つけ、postsこのコンボでは難しいが、全く同じエラーではない。 1つはcloseでしたが、自動的に解決されました。

まず、私はNetworkXと(Scipyと同様の要件を示しています)PyGraphVizためがインストールされたすべての必要なパッケージを検証しました。

次に、Pythonでこれらのモジュールのインストールをテストするためのスナップを探しました。最初の2つの例はNetworkX Reference Documentationです。これは、MatPlotLibとGraphVizの両方を使って、いくつかの例を示しています。

matplotlibのコード例では、私の作品(画面に画像をレンダリング)

In [11]: import networkx as nx 
In [12]: G=nx.complete_graph(5) 
In [13]: import matplotlib.pyplot as plt 
In [13]: nx.draw(G) 
In [13]: plt.show() 

しかし、GraphVizをもそして、同様のエラーが発生する

In [16]: import networkx as nx 
In [17]: G=nx.complete_graph(5) 
In [18]: H=nx.from_agraph(A) 
------------------------------------------------------------ 
AttributeError Traceback (most recent call last) 
<ipython-input-18-808fa68cefaa> in <module>() 
----> 1 H=nx.from_agraph(A) 
AttributeError: 'module' object has no attribute 'from_agraph' 
In [19]: A=nx.to_agraph(G) 
------------------------------------------------------------ 
AttributeError Traceback (most recent call last) 
<ipython-input-19-32d1616bb41a> in <module>() 
----> 1 A=nx.to_agraph(G) 
AttributeError: 'module' object has no attribute 'to_agraph' 
In [20]: print G 
complete_graph(5) 

切れ端私はPyGraphVizのチュートリアルページLayout & Drawingに投稿しました。これにはいくつかのスナップもあります。 PyGraphVizはNeato(デフォルト)、PyDot、Circo Post Script出力(Gimpを使用して表示)でを渡しました。 (唯一の違いは、これらのPyGraphVizの例は表示にレンダリングされず、ファイルにレンダリングされないということです)。動作するために

In [1]: import pygraphviz as pgv 
In [2]: d={'1': {'2': None}, '2': {'1': None, '3': None}, '3': {'2': None}} 
In [3]: A=pgv.AGraph(d) 
In [4]: A.write("pygraphviz_test_01.dot") 
In [5]: A.layout() 
In [6]: A.draw('pygraphviz_test_01.png') 

、複雑に PyGraphViz requires GraphVizパッケージのバイナリを追加します。私はArch Linuxを使用しており、そのディストリビューションのバージョンをインストールしました。アーチLinuxはにも合格したexample to test installation(ファイルに出力)を持っています。

私には何が欠けていますか? 何がNetworkXを引き起こす可能性があります& PyGraphVizは単独ではうまく動作しますが、一緒には動作しませんか?

答えて

48

networkx-1.11のdraw_graphviz関数には、graphviz描画ツールがnetworkxのトップレベル名前空間にインポートされなくなったことが原因で発生する小さなバグがあります。

次はあなたが明示的に

nx.drawing.nx_agraph.write_dot() 

かに関数をインポート長いパス名を使用する必要があります回避策

In [1]: import networkx as nx 

In [2]: G = nx.complete_graph(5) 

In [3]: from networkx.drawing.nx_agraph import graphviz_layout 

In [4]: pos = graphviz_layout(G) 

In [5]: nx.draw(G, pos) 

などなどto_agraphwrite_dot、などの他の機能を使用することですトップレベルのネームスペース

from networkx.drawing.nx_agraph import write_dot() 
write_dot() 
1

nx.nx_pydot.graphviz_layout()は、をNetworkxリリース1.11に使用する方法のようです。

import networkx as nx 
G = nx.complete_graph(4) 
pos = nx.nx_pydot.graphviz_layout(G) 

私はGraphviz_layout documentation for 1.11

としてこれをお勧め:

あなたはドキュメントから

sudo apt-get install graphviz 

いくつかのサンプルコードを経由してGraphvizをインストールする必要があります

関連する問題