Python: 如何可视化网络的最小生成树?
Python: how to visualize the Minimum Spanning Tree of a network?
我有一个由 NxN
个节点组成的常规网格网络。我可以绘制它,但我还想绘制它的 minimum spanning tree,这是一个 "subgraph that contains all the vertices and is a tree".
这是我创建网络的方式:
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)
这是我计算最小生成树的方法:
T=nx.minimum_spanning_tree(G)
这会生成一个与 G
类似的图,不同之处在于 T
具有与 G
相同的节点及其边的选择。因此,我想绘制 T
,这就是我所做的:
plt.figure()
nx.draw_networkx(G, pos=pos2, with_labels=False, node_size = 15)
plt.show()
但我只是再次绘制了网络。我如何修改最后几行以确保我的最小生成树被绘制出来?
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()
我有一个由 NxN
个节点组成的常规网格网络。我可以绘制它,但我还想绘制它的 minimum spanning tree,这是一个 "subgraph that contains all the vertices and is a tree".
这是我创建网络的方式:
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)
这是我计算最小生成树的方法:
T=nx.minimum_spanning_tree(G)
这会生成一个与 G
类似的图,不同之处在于 T
具有与 G
相同的节点及其边的选择。因此,我想绘制 T
,这就是我所做的:
plt.figure()
nx.draw_networkx(G, pos=pos2, with_labels=False, node_size = 15)
plt.show()
但我只是再次绘制了网络。我如何修改最后几行以确保我的最小生成树被绘制出来?
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()