2016-04-08 231 views
2

我有一个由NxN节点组成的规则网格网络。我可以绘制它,但我也想绘制它的minimum spanning tree,它是一个“包含所有顶点并且是树的子图”。Python:如何可视化网络的最小生成树?

这是我如何创建网络:

from __future__ import print_function, division 
import numpy 
from numpy import * 
import networkx as nx 
from networkx import * 
import matplotlib.pyplot as plt 

N=30 
G=nx.grid_2d_graph(N,N) 
pos = dict((n, n) for n in G.nodes()) 
labels = dict(((i, j), i + (N-1-j) * N) for i, j in G.nodes()) 
nx.relabel_nodes(G,labels,False) 
inds=labels.keys() 
vals=labels.values() 
inds.sort() 
vals.sort() 
pos2=dict(zip(vals,inds)) 
nx.draw_networkx(G, pos=pos2, with_labels=False, node_size = 15) 

enter image description here

我这是怎么计算的最小生成树:

T=nx.minimum_spanning_tree(G) 

这会产生就像G的曲线图, TG具有相同的节点及其边缘选择。因此,我想绘制T,这就是我所做的:

plt.figure() 
nx.draw_networkx(G, pos=pos2, with_labels=False, node_size = 15) 
plt.show() 

但我只是得到了网络再次绘制。我如何修改最后一行以确保我的最小生成树被绘制?

+1

通Ť代替的G到第二draw_networkx? – DaVinci

+0

我犯了一个非常愚蠢的错误。我道歉。 – FaCoffee

回答

2
plt.figure() 
nx.draw_networkx(G, pos=pos2, with_labels=False, node_size = 15) 
plt.show() 

应该是

plt.figure() 
nx.draw_networkx(T, pos=pos2, with_labels=False, node_size = 15) 
plt.show()