2015-08-24 7 views
5

मैं सिर्फ अजगर के साथ एक सरल ग्राफ आकर्षित करने के लिए चाहते हैं 3 networkx & Graphviz:अजगर 3 networkx draw_graphviz() काम नहीं करता है

import networkx as nx 

G = nx.complete_graph(3) 
nx.draw_graphviz(G) 

मैं ubuntu14.04 और IPython3 उपयोग कर रहा हूँ और मैं pip3 स्थापित किया हमेशा की तरह

ImportError: pydot could not be loaded: http://code.google.com/p/pydot/ 

और मैं pydotplus स्थापित करने और कोड चलाने की कोशिश की: networkx और चल कोड मुझे दिया

/usr/local/lib/python3.4/dist-packages/networkx/drawing/nx_pydot.py in pydot_layout(G, prog, root, **kwds) 
    294 
    295   if isinstance(node,list): 
--> 296    node=node[0] 
    297   pos=node.get_pos()[1:-1] # strip leading and trailing double quotes 
    298   if pos != None: 

IndexError: list index out of range 
भी

और pydot2:

/usr/local/lib/python3.4/dist-packages/pydot.py in write(self, path, prog, format) 
    1893    prog = self.prog 
    1894 
-> 1895   dot_fd = file(path, "w+b") 
    1896   if format == 'raw': 
    1897    data = self.to_string() 

NameError: name 'file' is not defined 

मैं काफी कुछ समय के खोज और पहले से ही है, लेकिन फिर भी प्रयास विफल अन्य pydots और pygraphviz संयोजन स्थापित करने में बिताया।

इस जबकि संबंधित हो सकता है: pydot and graphviz error: Couldn't import dot_parser, loading of dot files will not be possible, कि अजगर 3.

+0

इस https करता है: // समूहों .google.com/फोरम/#! विषय/pygraphviz- चर्चा/mbK5voZ9-hs कुछ समस्या बताते हैं? – Joel

+0

मुझे लगता है कि pygraphviz [DOT भाषा] (https://en.wikipedia.org/wiki/DOT_%28graph_description_language%29) की पार्सिंग पर निर्भर करता है जो कि पाइडॉट का काम है? और अब किसी भी तरह यह pydot है जो pygraphviz के बजाय Python3 के साथ असंगत है। – pterodragon

+0

FWIW, मैंने 'networkx.write_dot (G, 'graph.dot') का उपयोग करके .dot फ़ाइल को आउटपुट करके वांछित परिणाम प्राप्त किया है और फिर उचित ग्राफविज़ आउटपुट कमांड जैसे' neato -T png graph.dot> graph.png '। (ग्राफ़विज़ को पहले से स्थापित किया जाना है; अधिक के लिए मैन पेज देखें) – pterodragon

उत्तर

2

आप लाइन #292 को संपादित करने से इसका समाधान कर सकते हैं:

pydot_node = pydot.Node(make_str(n)).get_name().encode('utf-8') 

अंत में एनकोड दूर करने के लिए:

pydot_node = pydot.Node(make_str(n)).get_name() #.encode('utf-8') 

मैं इस बग/ठीक here रिपोर्ट की है।

+0

यह इस मामले में pydotplus का उपयोग करते समय त्रुटि को हल करता है :)। लेकिन मैं अभी भी matplotlib विंडो पॉपअप नहीं देख सकता? – pterodragon

+0

@ पटरोड्रैगन इंटरैक्टिव मोड में matplotlib है? विंडो को प्रकट करने के लिए आपको 'plt.show() 'करने की आवश्यकता हो सकती है। – mfitzp

+0

मैंने सोचा कि यह स्वचालित रूप से दिखाएगा। आपकी सहायताके लिए धन्यवाद! :) – pterodragon

1

नहीं एक बहुत ही महान जवाब में समस्या का समाधान नहीं करता है, लेकिन यह एक समाधान के रूप में कार्य करता है।

पहले उत्पादन networkx.write_dot(G, 'graph.dot') अजगर

का उपयोग करके .dot फ़ाइल और फिर neato -T png graph.dot > graph.png कमांड लाइन पर की तरह उचित Graphviz उत्पादन आदेश है।

2

ऐसा लगता है कि आप जिस पाइडोट का उपयोग कर रहे हैं वह एक संस्करण है जो पाइथन 3 के साथ असंगत है, जो फ़ाइल (...) का उपयोग करता है। फ़ाइल (...) पहले से ही पाइथन 3 में हटा दी गई है।

मैंने इस समस्या को देखा और पीपीपी पर एक पायथन 3 संगत संस्करण स्थापित किया।

अजगर 3.x के लिए Linux सिस्टम के लिए, कोशिश:

pip3 install pydot3

या पायथन 2.x के लिए सामान्य रूप में, कोशिश:

pip install pydot3

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