Python 如何使使用networkx的matplotlib动画更快?

Python 如何使使用networkx的matplotlib动画更快?,python,performance,matplotlib,Python,Performance,Matplotlib,下面的代码将函数(showNet)运行100次。该函数接受节点标签列表以更新网络图形。 现在,代码大约需要16.55秒才能完成,这意味着100帧/数字的每一次更新都需要16.55/100=0.16秒。这比我需要的少 我的问题是,有什么方法可以让这更快?我知道有一些解决方案,如多处理或blit,但我真的不知道如何在matplotlib中使用它们 import networkx as nx import matplotlib.pyplot as plt import numpy as np imp

下面的代码将函数(showNet)运行100次。该函数接受节点标签列表以更新网络图形。 现在,代码大约需要16.55秒才能完成,这意味着100帧/数字的每一次更新都需要16.55/100=0.16秒。这比我需要的少

我的问题是,有什么方法可以让这更快?我知道有一些解决方案,如多处理或blit,但我真的不知道如何在matplotlib中使用它们

import networkx as nx 
import matplotlib.pyplot as plt
import numpy as np
import random
import time


global ax, fig, G
fig, ax = plt.subplots(figsize=(10,7))
G = nx.DiGraph()

def showNet(n):
    global ax, fig, G

    plt.style.use('Solarize_Light2')
    
    fig.clf()    

    l1, l2, l3, l4, l5, l6, l7 = n[0], n[1], n[2], n[3], n[4], n[5], n[6] 

    edgelist= [(l1,l2),(l2,l3), (l3,l4), (l3,l5), (l4, l1), (l5, l6), (l5, l7)]

    pos = {l1: (10, 60), l2: (10, 40), l3:(80, 40), l4:(140, 60), l5:(200, 20), l6:(250, 40), l7:(250,10)}
    
    ax = nx.draw_networkx_nodes(G, pos=pos, nodelist=list(pos.keys()), node_size=2000, alpha=1) 
    ax = nx.draw_networkx_edges(G, pos=pos, edgelist= edgelist , edge_color="gray", arrows=True, arrowsize=10, arrowstyle='wedge') 

    ax = nx.draw_networkx_labels(G, pos=pos, labels=dict(zip(pos.keys(),pos.keys())),  font_color="black") 
    
    # Hide grid lines
    plt.grid(False)

    plt.ion() 
    fig.show() 
    plt.pause(0.0000001)


start = time.perf_counter()
for i in range(100):
    n = random.sample(range(1, 10), 7)
    showNet(n)

finish = time.perf_counter()
print(finish - start)
        

如果只更新节点名称,最好先绘制图形布局,然后只更新文本。还有,看看动画。是的,我认为在函数之外我唯一能做的事情就是图形和图形变量(G),我刚刚做了(参见我刚刚编辑的代码)。但仍然没有显著差异。之前的计时(当G在函数内部创建时)为16.55秒,现在G在函数外部,计时为16.1秒。你知道如何像我这样在matplotlib中使用多处理吗?谢谢。不用了,所有这些函数里面的ax=nx.draw\u network…都很昂贵
G=nx.DiGraph()
什么都不是。为什么速度不够快?如果你是实时绘制的,那么显然多重处理不会有帮助。“尽可能快”——你明白这是一个毫无意义的短语吗?如果您希望它“尽可能快”,就不会用Python编写它。你的规格是什么?它需要多快?