2017-11-20 51 views
0

を変更しないで、私は次のコードを持っている: https://pastebin.com/L4KfLhMcNetworkxアニメーション、グラフ

この最も重要な部分:

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 

を開始グラフは、接続のいずれもありませんワット-Strogatzグラフであります再接続されました。

このコードでは、matplotlib FuncAnimationを使用して、時間の経過と共に変化するグラフを作成しようとしています。これは、アニメーション機能で発生しています。だから、私は次のことを確認しました:ax.clear()がプロットを消去するたびに、エッジが再描画されます。そして、Gも残業に変更されます。しかし、グラフのGを描くときは、エッジが変更されても開始グラフと同じに見えます。

答えて

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) 

とアニメーションの変更を行うためのものだと思います。

関連する問題