Python中非常慢的网络图动画';带networkx的matplotlib
我正在制作一个随时间增长的networkx图形的动画。我有 它的工作与弯曲的边缘和所有。很高兴,但如图所示 它的速度大大减慢了!?任何人都可以解释或修改给定的代码以更快地运行。我不认为是我的电脑出了问题。 注意:即使没有花哨的曲线边缘,速度也非常慢。简单的nx.draw也会导致同样的问题Python中非常慢的网络图动画';带networkx的matplotlib,python,animation,matplotlib,networkx,digraphs,Python,Animation,Matplotlib,Networkx,Digraphs,我正在制作一个随时间增长的networkx图形的动画。我有 它的工作与弯曲的边缘和所有。很高兴,但如图所示 它的速度大大减慢了!?任何人都可以解释或修改给定的代码以更快地运行。我不认为是我的电脑出了问题。 注意:即使没有花哨的曲线边缘,速度也非常慢。简单的nx.draw也会导致同样的问题 我想我明白了。使用“matplotlib.patches import FancyArrowPatch,Circle”的函数正在减慢速度。这是“绘制网络”功能 我尝试用更简单的代码(nx.draw(mainG
我想我明白了。使用“matplotlib.patches import FancyArrowPatch,Circle”的函数正在减慢速度。这是“绘制网络”功能 我尝试用更简单的代码(nx.draw(mainGraph,nodeToCoordinate_dict))替换绘图代码,并将时间间隔缩短到100(0.1秒)。工作得很有魅力
现在,我只需要找到一种加速曲线图的方法。抱歉-当我复制并粘贴此图时,我得到一个显示单个节点的绘图,然后出现许多关键错误。@Joel这很奇怪,我将上面的代码复制到一个新的、独立的脚本中,并按预期运行。你们有需要的进口货吗?可能是更新的networkx和matplotlib。另外,请粘贴最相关的错误消息,我也许能找出你的问题所在。你能详细说明你是如何解决的吗?即使使用小图形,nx.draw_networkx_Edge中花哨的箭头补丁也非常慢。你的更快选择是什么?
import time
from matplotlib import pyplot as plt
from matplotlib import animation
import networkx as nx
from matplotlib.patches import FancyArrowPatch, Circle
import numpy as np
mainGraph = nx.DiGraph()
nodeToCoordinate_dict = {}
label_coordinatePositions = {}
edgeLabel_coordinatePositions = {}
edgeLabel_values_dict = {}
fig = plt.figure()
#=============================================================
def draw_network(G,pos,ax,sg=None):
e = None
for n in G:
c=Circle(pos[n],radius=0.02,alpha=0.5)
ax.add_patch(c)
G.node[n]['patch']=c
x,y=pos[n]
seen={}
for (u,v,d) in G.edges(data=True):
n1=G.node[u]['patch']
n2=G.node[v]['patch']
rad=0.1
if (u,v) in seen:
rad=seen.get((u,v))
rad=(rad+np.sign(rad)*0.1)*-1
alpha=0.5
color='k'
e = FancyArrowPatch(n1.center,n2.center,patchA=n1,patchB=n2,
arrowstyle='-|>',
connectionstyle='arc3,rad=%s'%rad,
mutation_scale=10.0,
lw=2,
alpha=alpha,
color=color)
seen[(u,v)]=rad
ax.add_patch(e)
return e
#========================================================
def animate(i):
startTime = time.time()
"""perform animation step"""
global mainGraph, nodeToCoordinate_dict, label_coordinatePositions
mainGraph.add_node(str(i%20)+","+str(i/20), pos = (i%20,i/20))
if not (i%20 == 0):
mainGraph.add_edge(str(i%20-1)+","+str(i/20), str(i%20)+","+str(i/20))
prevNode_coordinate = nodeToCoordinate_dict[str(i%20-1)+","+str(i/20)]
mainGraph[str(i%20-1)+","+str(i/20)][str(i%20)+","+str(i/20)]['p'] = 1.0
#END IF
nodeToCoordinate_dict[str(i%20)+","+str(i/20)] = (i%20,i/20)
ax=plt.gca()
draw_network(mainGraph,nodeToCoordinate_dict,ax)
ax.autoscale()
plt.axis('equal')
plt.axis('off')
print("time Elapsed = ", time.time()-startTime)
return None #mainGraph
#====================================================
ani = animation.FuncAnimation(fig, animate, frames= 60,interval=1000)
plt.show()