gpt4 book ai didi

python-3.x - 使用 networkX 和 matplotlib 在 python 中的相同位置/坐标绘制不同的图形

转载 作者:行者123 更新时间:2023-12-04 15:56:05 24 4
gpt4 key购买 nike

图 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() `

Graph 1

在图 2 中,我删除了一些边并重新绘制了图,但是节点的位置在变化,如何为下一个图存储节点的位置?

最佳答案

您需要在绘制图表时重新使用您的 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()

enter image description here

现在我将创建一个新图并只添加一半边

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()

enter image description here如您所见,只添加了一半的边,节点位置仍然保持不变。

关于python-3.x - 使用 networkX 和 matplotlib 在 python 中的相同位置/坐标绘制不同的图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51565679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com