2013-09-01 7 views
6

के बीच बातचीत मैं matplotlib में नेटवर्कक्स और विज़ुअलाइज़ेशन की कोशिश कर रहा हूं, मैं उलझन में हूं क्योंकि मुझे स्पष्ट रूप से समझ में नहीं आता कि वे एक दूसरे के साथ कैसे बातचीत करते हैं? वहाँ सरल उदाहरणनेटवर्कक्स और matplotlib

import matplotlib.pyplot 
import networkx as nx 
G=nx.path_graph(8) 
nx.draw(G) 
matplotlib.pyplot.show() 

मैं कहां से pyplot कहता हूं, कि मैं आकर्षित करने के लिए ग्राफ जी चाहते हो? मुझे लगता है कि कुछ nx.draw उपयोग matplotlib.pyplot जैसे {साजिश, आदि ...} तो, मैं 2 रेखांकन आकर्षित करने के लिए चाहते हैं:।

import matplotlib.pyplot 
import networkx as nx 

G=nx.path_graph(8) 
E=nx.path_graph(30) 
nx.draw(G) 

matplotlib.pyplot.figure() 
nx.draw(E) 
matplotlib.pyplot.show() 

तो ... थोड़ा प्रयोग

import networkx as nx 
G=nx.path_graph(8) 
E=nx.path_graph(30) 
nx.draw(G) 
import matplotlib.pyplot 
matplotlib.pyplot.figure() 
nx.draw(E) 
import matplotlib.pyplot as plt 
plt.show() 

कृपया मुझे इस बेवकूफ कोड के बारे में मत मारो, मैं बस समझने की कोशिश कर रहा हूं - नेटवर्कक्स कुछ matplotlib कैसे आकर्षित करता है, जबकि यह अभी तक आयात नहीं करता है!

पीएस: मेरी अंग्रेजी के लिए खेद है।

उत्तर

13

बस दो अलग कुल्हाड़ियों बनाने यदि आप अलग से रेखांकन आकर्षित या एक ही Axes वस्तु बनाने के लिए एक यह nx.draw को भेजना चाहते हैं। उदाहरण के लिए:

G = nx.path_graph(8) 
E = nx.path_graph(30) 

# one plot, both graphs 
fig, ax = subplots() 
nx.draw(G, ax=ax) 
nx.draw(E, ax=ax) 

पाने के लिए:

enter image description here

आप दो अलग आंकड़ा वस्तुओं तो अलग से उन्हें बनाने ताकि तरह चाहते हैं:

G = nx.path_graph(8) 
E = nx.path_graph(30) 

# two separate graphs 
fig1 = figure() 
ax1 = fig1.add_subplot(111) 
nx.draw(G, ax=ax1) 

fig2 = figure() 
ax2 = fig2.add_subplot(111) 
nx.draw(G, ax=ax2) 

उपज:

enter image description here

जो कुछ के लिए यह यह ax तर्क की तरह लग रहा लायक है: जिसका परिणाम

G = nx.path_graph(8) 
E = nx.path_graph(30) 

pos=nx.spring_layout(E,iterations=100) 

subplot(121) 
nx.draw(E, pos) 

subplot(122) 
nx.draw(G, pos) 

: enter image description here enter image description here

अंत में, आप अगर तुम चाहते थे एक subplot बना सकते हैं, इस तरह nx.drawmatplotlib के एपीआई के साथ बेकार है जब आप उप बनाना चाहते हैं pylab के बाहर भूखंड, क्योंकि nx.draw में gca पर कुछ कॉल हैं जो इसे pylab इंटरफ़ेस पर निर्भर करती हैं। वास्तव में क्यों नहीं खोला गया था, बस सोचा कि मैं इसे इंगित करूंगा।

nx.draw के स्रोत कोड काफी सीधा है:

try: 
    import matplotlib.pylab as pylab 
except ImportError: 
    raise ImportError("Matplotlib required for draw()") 
except RuntimeError: 
    print("Matplotlib unable to open display") 
    raise 

cf=pylab.gcf() 
cf.set_facecolor('w') 
if ax is None: 
    if cf._axstack() is None: 
     ax=cf.add_axes((0,0,1,1)) 
    else: 
     ax=cf.gca() 

# allow callers to override the hold state by passing hold=True|False 

b = pylab.ishold() 
h = kwds.pop('hold', None) 
if h is not None: 
    pylab.hold(h) 
try: 
    draw_networkx(G,pos=pos,ax=ax,**kwds) 
    ax.set_axis_off() 
    pylab.draw_if_interactive() 
except: 
    pylab.hold(b) 
    raise 
pylab.hold(b) 
return 
  1. एक आंकड़ा gcf का उपयोग कर पर्यावरण से कब्जा कर लिया है।
  2. फिर Axes ऑब्जेक्ट को आकृति में जोड़ा जाता है यदि कोई अस्तित्व में नहीं है, अन्यथा इसे gca का उपयोग करके पर्यावरण से प्राप्त करें।
  3. पर साजिश चेहरे रंग सफेद
  4. बारी hold बनाओ एक आंतरिक समारोह के साथ आकर्षित
  5. कुल्हाड़ियों
  6. अंत में अगर हम इंटरैक्टिव मोड में होने पर बंद कर दें, यह आकर्षित और किसी भी अपवाद reraise कि पकड़े गए
+0

इस अद्भुत सिंहावलोकन और उत्तर के लिए बहुत बहुत धन्यवाद! – user1113159

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