2012-11-04 16 views
5

Ho un layout di molla NetworkX che rappresenta una topologia di rete nodi principali sono colore rosso e l'altra sono blu I percorsi ai nodi principali bordi sono indicati con trattini Come posso animare disegno la bordi networkx con un intervallo di tempo specificato?animare NetworkX disegno bordi

#!/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') 

risposta

0

provare questo

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

Ecco quello che ho fatto, è possibile utilizzare plt.figure() per ottenere l'istanza della figura e colla che nella tela, quindi aggiungere la tela al pannello utilizzando ad esempio, 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() 
Problemi correlati