【问题标题】:Networkx animation, graph not changingNetworkx 动画,图形不变
【发布时间】:2018-05-04 06:31:51
【问题描述】:

我有以下代码: 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 制作随时间变化的图形。这发生在动画功能中。所以我检查了以下内容:自从 ax.clear() 清理绘图以来,每次都重新绘制边缘。于是G也换了加班。但是每当我绘制 G 的图时,它看起来与起始图相同,即使边缘已更改。

【问题讨论】:

    标签: python animation matplotlib graph networkx


    【解决方案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)
    

    动画随之改变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 2016-05-02
      • 2014-02-21
      • 2015-05-16
      • 2019-11-29
      • 1970-01-01
      • 2014-03-25
      相关资源
      最近更新 更多