绘制大型NetworkX图时返回进度状态

时间:2015-10-14 13:43:29

标签: python-2.7 matplotlib graph networkx

  • 我有一张大图,我画了很长时间 过程
  • 是否可以返回图纸当前状态的statuscurrent_nodepercentage
  • 我不打算逐步绘制网络,因为我所做的就是将其保存为高dpi图像。

以下是我使用的代码示例:

path = nx.shortest_path(G, source=u'1234', target=u'98765')
path_edges = zip(path, path[1:])
pos = nx.spring_layout(G) 
nx.draw_networkx_nodes(G,pos,nodelist=path,node_color='r') 
nx.draw_networkx_edges(G,pos,edgelist=path_edges,edge_color='r',width=10) 
plt.axis('equal')
plt.savefig('prototype_map.png', dpi=1000)
plt.show()

1 个答案:

答案 0 :(得分:2)

我认为唯一的方法就是容纳绘图功能的源代码来打印10%,20%完成的东西....但当我检查source code of draw_networkx_nodes & draw_networkx时,我意识到它是由于draw函数将位置(节点和边缘)存储在numpy数组中,因此将其发送到matplotlib (sourcecode)的ax.scatter函数,这是一个很难操作而不会弄乱的东西。我唯一能想到的就是改变:

xy = numpy.asarray([pos[v] for v in nodelist]) # In draw_networkx_nodes function

xy = []
count = 0
for v in nodelist:
    xy.append(pos[v])
    count +=1
    if (count == len(nodelist)):
        print '50% of nodes completed'
print '100% of nodes completed'
xy = numpy.asarray(xy)

类似地,当调用draw_network_edges时,指示边绘图的进度。我不确定这会有多远,因为我不知道ax.scatter函数花了多少时间。我也查看了分散函数的源代码,但我无法指出循环或某些东西来打印已经完成某些进展的指示。