Python 如何使使用networkx的matplotlib动画更快?
下面的代码将函数(showNet)运行100次。该函数接受节点标签列表以更新网络图形。 现在,代码大约需要16.55秒才能完成,这意味着100帧/数字的每一次更新都需要16.55/100=0.16秒。这比我需要的少 我的问题是,有什么方法可以让这更快?我知道有一些解决方案,如多处理或blit,但我真的不知道如何在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
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编写它。你的规格是什么?它需要多快?