使用坐标绘制 NetworkX 图形
Plot NetworkX Graph with coordinates
我的 networkx 图由 属性 名为“坐标”(x,y) 的对象组成:
import networkx as nx
import matplotlib.pyplot as plt
class device():
def __init__(self, name):
self.name = name
self.coords = (0,0)
def __repr__(self):
return self.name
device1 = device('1')
device1.coords = (20, 5)
device2 = device('2')
device2.coords = (-4, 10.5)
device3 = device('3')
device3.coords = (17, -5)
G = nx.Graph()
G.add_nodes_from([device1, device2, device3])
nx.draw(G, with_labels = True)
plt.show()
每当我绘制它时,matplotlib 都会以混乱的顺序绘制图形。
如何根据坐标绘制这样的图形?
nx.draw
接受一个 pos
参数来定位所有节点。它需要一个以节点为键、以位置为值的字典。所以你可以把上面的改成:
devices = [device1, device2, device3]
G = nx.Graph()
G.add_nodes_from(devices)
pos = {dev:dev.coords for dev in devices}
# {1: (20, 5), 2: (-4, 10.5), 3: (17, -5)}
nx.draw(G, pos=pos, with_labels = True, node_color='lightblue')
plt.show()
我的 networkx 图由 属性 名为“坐标”(x,y) 的对象组成:
import networkx as nx
import matplotlib.pyplot as plt
class device():
def __init__(self, name):
self.name = name
self.coords = (0,0)
def __repr__(self):
return self.name
device1 = device('1')
device1.coords = (20, 5)
device2 = device('2')
device2.coords = (-4, 10.5)
device3 = device('3')
device3.coords = (17, -5)
G = nx.Graph()
G.add_nodes_from([device1, device2, device3])
nx.draw(G, with_labels = True)
plt.show()
每当我绘制它时,matplotlib 都会以混乱的顺序绘制图形。 如何根据坐标绘制这样的图形?
nx.draw
接受一个 pos
参数来定位所有节点。它需要一个以节点为键、以位置为值的字典。所以你可以把上面的改成:
devices = [device1, device2, device3]
G = nx.Graph()
G.add_nodes_from(devices)
pos = {dev:dev.coords for dev in devices}
# {1: (20, 5), 2: (-4, 10.5), 3: (17, -5)}
nx.draw(G, pos=pos, with_labels = True, node_color='lightblue')
plt.show()