Animate drawing networkx edges

匿名 (未验证) 提交于 2019-12-03 01:00:01

问题:

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'] 

回答1:

Try the animation module. Also see this awesome tutorial, Matplotlib animate over an image,



回答2:

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() 


回答3:

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 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!