Python 设置图形网络X边的动画
我有一个networkx spring布局,它表示网络拓扑 关键节点的颜色为红色,另一个为蓝色 到关键节点边缘的路线用虚线表示 如何以指定的时间间隔为networkx边的图形设置动画Python 设置图形网络X边的动画,python,matplotlib,networkx,Python,Matplotlib,Networkx,我有一个networkx spring布局,它表示网络拓扑 关键节点的颜色为红色,另一个为蓝色 到关键节点边缘的路线用虚线表示 如何以指定的时间间隔为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
#!/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')
#/usr/bin/env python
将matplotlib.pyplot作为plt导入
将networkx导入为nx
将matplotlib导入为mpl
G=nx.Graph()
G.增加边缘('a','b',重量=0.6)
G.增加边缘('a','c',重量=0.2)
G.加上边缘('c','d',重量=0.1)
G.加上边缘('c','e',重量=0.7)
G.加上边缘('c','f',重量=0.9)
G.增加边缘('a','d',重量=0.3)
如果d['weight']>0.5,则G.边中(u,v,d)的elarge=[(u,v)(数据=真)
esmall=[(u,v)表示G.edges中的(u,v,d)(data=True)如果d['weight']请尝试以下方法
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
尝试。也可以看到这一点,这里是我所做的,您可以使用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()
我使用了matplotlib动画库animation.ArtistAnimation(图,ims,interval=50,blit=True,repeat\u delay=1000)这实际上只是一个链接式的答案。