2016-04-08 14 views
2

Ich habe ein reguläres Netz von NxN Knoten. Ich kann es plotten, aber ich würde auch gerne seine minimum spanning tree plotten, die ein "Untergraph ist, der alle Ecken enthält und ein Baum ist". DiesePython: Wie visualisiert man den Minimum Spanning Tree eines Netzwerks?

ist, wie ich das Netzwerk zu erstellen:

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

Dies ist, wie ich das Minimum Spanning Tree berechnen:

T=nx.minimum_spanning_tree(G) 

Dies erzeugt eine grafische Darstellung wie G, mit Der Unterschied, dass T hat die gleichen Knoten wie G und eine Auswahl seiner Kanten. Daher würde Ich mag T zeichnen, und das ist, was ich getan habe:

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

Aber ich habe einfach das Netzwerk wieder aufgetragen. Wie kann ich die letzten Zeilen ändern, um sicherzustellen, dass mein Minimum Spanning Tree geplottet wird?

+1

Pass T anstelle von G auf den zweiten draw_networkx sein? – DaVinci

+0

Ich habe einen sehr dummen Fehler gemacht. Ich entschuldige mich. – FaCoffee

Antwort

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

sollte

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