2016-02-08 3 views
26

मैं कुछ पायथन ग्राफ़ विज़ुअलाइज़ेशन सीखने के लिए काम कर रहा हूं। मुझे कुछ ब्लॉग पोस्ट somethings कर रहा था, मैं कोशिश करना चाहता था। दुर्भाग्य से मैं बहुत दूर से मिला नहीं, तो इस त्रुटि का सामना: AttributeError: 'module' object has no attribute 'graphviz_layout'नेटवर्कएक्स और पायग्राफविज़ को अकेले ठीक काम करने का कारण क्या हो सकता है लेकिन एक साथ नहीं?

कोड का सरलतम स्निप जो अपने सिस्टम पर त्रुटि reproduces यह है,

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 इस कॉम्बो के साथ कठिनाई हो रही है, लेकिन एक ही त्रुटि नहीं है। एक close था, लेकिन यह स्वचालित रूप से स्वयं हल हो गया।

पहले, मैं सभी आवश्यक संकुल NetworkX और PyGraphViz (जो Scipy के समान आवश्यकताओं को सूचीबद्ध) स्थापित किए गए थे के लिए सत्यापित।

अगला, मैंने पाइथन में इन मॉड्यूल की स्थापना की जांच करने के लिए स्निप की तलाश की। पहले दो उदाहरण NetworkX Reference Documentation से हैं। यह MatPlotLib और GraphViz दोनों का उपयोग करके कुछ उदाहरण स्निप सूचीबद्ध करता है।

matplotlib कोड उदाहरण मेरे लिए काम करता (स्क्रीन के लिए एक छवि renders),

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 भी snips उत्पादन मिलती-जुलती त्रुटियां,

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) 

फिर मैंने Layout & Drawing पर PyGraphViz के ट्यूटोरियल पेज को आजमाया। इसमें कुछ स्निप भी हैं। पायग्राफविज़ ने को नाटो (डिफ़ॉल्ट), पायडॉट, और सर्को पोस्ट स्क्रिप्ट आउटपुट (गिंप का उपयोग करके देखा) के साथ पास किया। (केवल अंतर यह है कि इन 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 पैकेज बाइनरी जोड़ा जा रहा है,। मैं आर्क लिनक्स का उपयोग कर रहा हूं, और उस डिस्ट्रो के संस्करण को स्थापित किया है। आर्क लिनक्स में example to test installation (फिर से, आउटपुट करने के लिए आउटपुट) है जो भी पास कर चुका है।

मुझे क्या याद आ रही है? क्या नेटवर्कएक्स & PyGraphViz को अकेले ठीक काम करने का कारण बन सकता है लेकिन एक साथ नहीं?

उत्तर

48

networkx-1.11 में draw_graphviz समारोह में एक छोटे से बग परिवर्तन Graphviz आरेखण उपकरण नहीं रह गया है networkx के शीर्ष स्तर नेम स्पेस में आयात किया जाता है कि से शुरू हो रहा है।

निम्नलिखित एक समाधान

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_agraph, write_dot, आदि आप स्पष्ट रूप से लंबे समय तक पथ नाम

nx.drawing.nx_agraph.write_dot() 

का उपयोग करें या में समारोह आयात करने के लिए की आवश्यकता होगी उपयोग करने के लिए शीर्ष-स्तरीय नामस्थान

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

नेटवर्कक्स रिलीज 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 स्थापित करने के लिए आवश्यकता हो सकती है

संबंधित मुद्दे

 संबंधित मुद्दे