我有以下代码: https://pastebin.com/L4KfLhMc
最重要的部分:
def animate(i):
ax.clear()
plt.axis('off')
edges = G.edges()
edge1, edge2 = random.sample(edges, 2)
while set(edge1) & set(edge2):
edge1, edge2 = random.sample(edges, 2)
new_edge1 = (edge1[0], edge2[1])
new_edge2 = (edge1[1], edge2[0])
if not(new_edge1 in edges or new_edge2 in edges):
G.remove_edge(*edge1)
G.remove_edge(*edge2)
G.add_edge(new_edge1[0], new_edge2[0])
G.add_edge(new_edge1[1], new_edge2[1])
#print(G.edges())
edges = nx.draw_networkx_edges(G, pos, ax=ax)
nodes = nx.draw_networkx_nodes(G, pos, node_color="#87CEEB", node_size=50, ax=ax)
return edges, nodes
起始图是Watts-Strogatz图,其中没有重新连接任何连接。
在这段代码中,我尝试使用matplotlib FuncAnimation制作随时间变化的图形。这发生在animate函数中。所以我检查了以下内容:每次重新绘制边缘,因为ax.clear()清理了绘图。然后G也加班了。但每当我绘制G的图形时,它看起来与起始图形相同,即使边缘已经改变。
答案 0 :(得分:1)
动画不会更改,因为您添加和删除相同的节点。密切关注:
new_edge1 = (edge1[0], edge2[1])
new_edge2 = (edge1[1], edge2[0])
if not(new_edge1 in edges or new_edge2 in edges):
G.remove_edge(*edge1)
G.remove_edge(*edge2)
G.add_edge(new_edge1[0], new_edge2[0]) # equal to (edge1[0], edge1[1])
G.add_edge(new_edge1[1], new_edge2[1]) # equal to (edge2[1], edge2[0])
我想你的意思是
G.add_edge(*new_edge1)
G.add_edge(*new_edge2)
动画改变。