私はいくつかのPythonグラフの視覚化を学ぶことに取り組んでいます。私が試してみたいと思っていたことを書いているいくつか のブログ記事を見つけました。残念ながら、次のエラーが発生して、あまりうまくいきませんでした:AttributeError: 'module' object has no attribute 'graphviz_layout'
私のシステムでエラーを再現するコードの最も簡単な抜粋はこれです、
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'
同様の質問が見つかりました、およびこのコンボで問題のある投稿がありましたが、まったく同じエラーではありませんでした。1 つは近いものでしたが、自動的に解決されました。
まず、NetworkXと PyGraphViz に必要なすべてのパッケージ ( Scipyと同様の要件がリストされています) がインストールされていることを確認しました。
次に、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が動作するには GraphVizパッケージのバイナリが必要です。私は Arch Linux を使用しており、そのディストリビューションのバージョンをインストールしました。Arch Linux には、インストールをテストするための例(ファイルへの出力) があり、これも.
私は何が欠けていますか?NetworkX と PyGraphViz が単独では正常に動作するが、一緒に動作しない原因は何ですか?