图1:
邻接表:
2:[2、3、4、5、6、7、10、11、12、13、14]
3:[2、3、4、5、6、7、10、11、12、13、14]
5:[2、3、4、5、6、7、8、9]
图:
`import networkx as nx
G = nx.Graph()
G1 = nx.Graph()
import matplotlib.pyplot as plt
for i, j in adj_list.items():
for k in j:
G.add_edge(i, k)
pos = nx.spring_layout(G)
nx.draw(G, with_labels=True, node_size = 1000, font_size=20)
plt.draw()
plt.figure() # To plot the next graph in a new figure
plt.show() `
在图2中,我消除了一些边缘并重新绘制了图,但是节点的位置正在改变,如何为下一张图存储节点的位置?
答案 0 :(得分:0)
在绘制图形时,您需要重新使用pos
变量。 nx.spring_layout
返回一个字典,其中节点id是键,值是要绘制的节点的x,y坐标。只需重复使用相同的pos
变量,并将其作为属性传递给nx.draw
这样的函数
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
G1 = nx.Graph()
adj_list = {2: [2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14],
3: [2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14],
5: [2, 3, 4, 5, 6, 7, 8, 9]}
import matplotlib.pyplot as plt
for i, j in adj_list.items():
for k in j:
G.add_edge(i, k)
pos = nx.spring_layout(G) #<<<<<<<<<< Initialize this only once
nx.draw(G,pos=pos, with_labels=True, node_size = 1000, font_size=20) #<<<<<<<<< pass the pos variable
plt.draw()
plt.figure() # To plot the next graph in a new figure
plt.show()
现在,我将创建一个新图并仅添加一半的边缘
cnt = 0
G = nx.Graph()
for i, j in adj_list.items():
for k in j:
cnt+=1
if cnt%2 == 0:
continue
G.add_edge(i, k)
nx.draw(G,pos=pos, with_labels=True, node_size = 1000, font_size=20) #<-- same pos variable is used
plt.draw()
plt.figure() # To plot the next graph in a new figure
plt.show()