I have a networkx spring layout that represents a network topology Key nodes are color as red and the other are blue The routes to the key nodes edges are indicated with dashes How can I animate the drawing the networkx edges with a specified time interval?
#!/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']
Here what I did, you can use plt.figure() to get the instance of the figure and glue that into the canvas, then add the canvas to the panel using e.g., 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()
try this
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