2012-11-04 15 views
5

मैं मैं ड्राइंग कैसे चेतन कर सकते हैं एक networkx वसंत लेआउट कि एक नेटवर्क टोपोलॉजी कुंजी नोड्स लाल के रूप में रंग के होते हैं और अन्य कुंजी नोड्स के लिए मार्गों किनारों डैश साथ दिखाई देते हैं नीले रंग के होते का प्रतिनिधित्व करता है निर्दिष्ट समय अंतराल के साथ नेटवर्क x किनारों?चेतन ड्राइंग networkx किनारों

#!/usr/bin/env python 

import matplotlib.pyplot as plt 
import networkx as nx 
import matplotlib as mpl 

G=nx.Graph() 

G.add_edge('a','b',weight=0.6) 
G.add_edge('a','c',weight=0.2) 
G.add_edge('c','d',weight=0.1) 
G.add_edge('c','e',weight=0.7) 
G.add_edge('c','f',weight=0.9) 
G.add_edge('a','d',weight=0.3) 

elarge=[(u,v) for (u,v,d) in G.edges(data=True) if d['weight'] >0.5] 
esmall=[(u,v) for (u,v,d) in G.edges(data=True) if d['weight'] <=0.5] 

#specify an initial position that is not random e.g. use a circular layout 
pos=nx.circular_layout(G) 
pos=nx.spring_layout(G,dim=2,pos=pos) # positions for all nodes 
#pos=nx.spring_layout(G) # positions for all nodes 
print "Graph xy positions" 
print pos 

# nodes 
nx.draw_networkx_nodes(G,pos,node_size=700) 

# edges 
nx.draw_networkx_edges(G,pos,edgelist=elarge, 
       width=6) 
nx.draw_networkx_edges(G,pos,edgelist=esmall, 
       width=6,alpha=0.5,edge_color='b',style='dashed') 

# labels 
nx.draw_networkx_labels(G,pos,font_size=20,font_family='sans-serif') 

plt.xlim(-0.05,1.05) 
plt.ylim(-0.05,1.05) 
plt.axis('off') 

उत्तर

0

animation module की कोशिश करो। इसके अलावा इस भयानक tutorial, Matplotlib animate over an image,

+1

मैं matplotlib एनीमेशन पुस्तकालय animation.ArtistAnimation इस्तेमाल किया (अंजीर, आईएमएस, अंतराल = 50, Blit = सच, repeat_delay = 1000) – user1772523

+0

यह वास्तव में सिर्फ एक लिंक केवल जवाब। – Joel

0

कोशिश इस

def animate(): 
    tstart = time.time()     
    nf = 100 
    for i in np.arange(1,nf): 
     #... 
     #update plot code 
     #... 
     fig.canvas.draw()     

     # stop execution of animate() untill the generators next() method is called 
     yield True      # continue animation 
    print 'FPS:' , nf/(time.time()-tstart) 
    raise SystemExit 
1

यहाँ मैं क्या किया है, तो आप plt.figure() का उपयोग कर सकते जैसे का उपयोग कर आंकड़ा और गोंद कि कैनवास में है, तो पैनल के लिए कैनवास जोड़ने के कहने प्राप्त करने के लिए, vbox देखना :

import matplotlib.pyplot as plt 
import networkx as nx 
import wx 
from matplotlib.backends.backend_wxagg import \ 
FigureCanvasWxAgg as FigCanvas, \ 
NavigationToolbar2WxAgg as NavigationToolbar 

class NetworkFrame(wx.Frame): 

def __init__(self): 
    wx.Frame.__init__(self, None, -1) 
    self.panel = wx.Panel(self) 
    self.fig = plt.figure() 
    self.canvas = FigCanvas(self.panel, -1, self.fig) 
    G=nx.house_graph() 
pos={0:(0,0), 
    1:(1,0), 
    2:(0,1), 
    3:(1,1), 
    4:(0.5,2.0)} 

nx.draw_networkx_nodes(G,pos,node_size=2000,nodelist=[4]) 
nx.draw_networkx_nodes(G,pos,node_size=3000,nodelist=[0,1,2,3],node_color='b') 
nx.draw_networkx_edges(G,pos,alpha=0.5,width=6) 
plt.axis('off') 
self.vbox = wx.BoxSizer(wx.VERTICAL) 
    self.vbox.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW) 
    self.toolbar = NavigationToolbar(self.canvas) 
    self.vbox.Add(self.toolbar, 0, wx.EXPAND) 
    self.panel.SetSizer(self.vbox) 
    self.vbox.Fit(self) 


#plt.savefig("house_with_colors.png") # save as png 
#plt.show() # display 

if __name__ == '__main__': 
    app = wx.PySimpleApp() 
    app.frame = NetworkFrame() 
    app.frame.Show() 
    app.MainLoop() 
संबंधित मुद्दे