从图中删除边
Removing Edges from a Graph
我做了一个带权重的图表。我正在尝试删除 Node1 的权重。我删除了 Node1,但它的重量仍然存在。我怎样才能去除重量呢?
我的代码:
import networkx as nx
import matplotlib.pyplot as plt
G=nx.DiGraph()
i=1
#Adding nodes to graph
# "pos" is for the location of the nodes
G.add_node(0,pos=(0,5))
G.add_node(1,pos=(10,0))
G.add_node(2,pos=(5,-5))
G.add_node(3,pos=(-5,-5))
G.add_node(4,pos=(-10,0))
# Adding edges each node
G.add_edge(0,4,weight=2)
G.add_edge(0,1,weight=5)
G.add_edge(0,2,weight=3)
G.add_edge(1,3,weight=6)
G.add_edge(1,2,weight=2)
G.add_edge(2,1,weight=1)
G.add_edge(2,3,weight=2)
G.add_edge(4,3,weight=4)
G.add_edge(4,2,weight=10)
G.add_edge(4,1,weight=6)
pos=nx.get_node_attributes(G,'pos')
list = [nx.dijkstra_path(G,4,1,6),nx.dijkstra_path(G,4,2,10),nx.dijkstra_path(G,4,3,4)]
print((list))
print("Shortest path btwn 4-1:",nx.dijkstra_path(G,4,1),"=",nx.dijkstra_path_length(G,4,1))
print("Shortest path btwn 4-2:",nx.dijkstra_path(G,4,2),"=",nx.dijkstra_path_length(G,4,2))
print("Shortest path btwn 4-3:",nx.dijkstra_path(G,4,3),"=",nx.dijkstra_path_length(G,4,3))
labels = nx.get_edge_attributes(G,'weight', )
print("Before removing Node 1: ",G.nodes)
nx.draw_networkx_edge_labels(G,pos,edge_labels=labels, )
nx.draw(G, pos, with_labels=True)
plt.show()
plt.clf() #Clears the current figure.
G.remove_node(1) # this line of code remove only vertex, don't forget also remove weights
print("*****************")
print("******************")
print("After removing Node1: ",G.nodes)
nx.draw_networkx_edge_labels(G,pos,edge_labels=labels, )
nx.draw(G, pos, with_labels=True)
plt.show()
我删除Node1之前的图:
我去掉Node1后的图:
之所以画出边的权重,是因为删除节点后权重没有更新。因此,脚本中的 pos
和 labels
应该在删除节点后重新计算:
G.remove_node(1) # this line of code remove only vertex, don't forget also remove weights
labels = nx.get_edge_attributes(G,'weight', )
pos=nx.get_node_attributes(G,'pos')
这是完整的例子:
import networkx as nx
import matplotlib.pyplot as plt
G=nx.DiGraph()
i=1
#Adding nodes to graph
# "pos" is for the location of the nodes
G.add_node(0,pos=(0,5))
G.add_node(1,pos=(10,0))
G.add_node(2,pos=(5,-5))
G.add_node(3,pos=(-5,-5))
G.add_node(4,pos=(-10,0))
# Adding edges each node
G.add_edge(0,4,weight=2)
G.add_edge(0,1,weight=5)
G.add_edge(0,2,weight=3)
G.add_edge(1,3,weight=6)
G.add_edge(1,2,weight=2)
G.add_edge(2,1,weight=1)
G.add_edge(2,3,weight=2)
G.add_edge(4,3,weight=4)
G.add_edge(4,2,weight=10)
G.add_edge(4,1,weight=6)
pos=nx.get_node_attributes(G,'pos')
list = [nx.dijkstra_path(G,4,1,6),nx.dijkstra_path(G,4,2,10),nx.dijkstra_path(G,4,3,4)]
print((list))
print("Shortest path btwn 4-1:",nx.dijkstra_path(G,4,1),"=",nx.dijkstra_path_length(G,4,1))
print("Shortest path btwn 4-2:",nx.dijkstra_path(G,4,2),"=",nx.dijkstra_path_length(G,4,2))
print("Shortest path btwn 4-3:",nx.dijkstra_path(G,4,3),"=",nx.dijkstra_path_length(G,4,3))
labels = nx.get_edge_attributes(G,'weight', )
print("Before removing Node 1: ",G.nodes)
nx.draw_networkx_edge_labels(G,pos,edge_labels=labels, )
nx.draw(G, pos, with_labels=True)
plt.show()
plt.clf() #Clears the current figure.
G.remove_node(1) # this line of code remove only vertex, don't forget also remove weights
labels = nx.get_edge_attributes(G,'weight', )
pos=nx.get_node_attributes(G,'pos')
print("*****************")
print("******************")
print("After removing Node1: ",G.nodes)
nx.draw_networkx_edge_labels(G,pos,edge_labels=labels, )
nx.draw(G, pos, with_labels=True)
plt.show()
我做了一个带权重的图表。我正在尝试删除 Node1 的权重。我删除了 Node1,但它的重量仍然存在。我怎样才能去除重量呢? 我的代码:
import networkx as nx
import matplotlib.pyplot as plt
G=nx.DiGraph()
i=1
#Adding nodes to graph
# "pos" is for the location of the nodes
G.add_node(0,pos=(0,5))
G.add_node(1,pos=(10,0))
G.add_node(2,pos=(5,-5))
G.add_node(3,pos=(-5,-5))
G.add_node(4,pos=(-10,0))
# Adding edges each node
G.add_edge(0,4,weight=2)
G.add_edge(0,1,weight=5)
G.add_edge(0,2,weight=3)
G.add_edge(1,3,weight=6)
G.add_edge(1,2,weight=2)
G.add_edge(2,1,weight=1)
G.add_edge(2,3,weight=2)
G.add_edge(4,3,weight=4)
G.add_edge(4,2,weight=10)
G.add_edge(4,1,weight=6)
pos=nx.get_node_attributes(G,'pos')
list = [nx.dijkstra_path(G,4,1,6),nx.dijkstra_path(G,4,2,10),nx.dijkstra_path(G,4,3,4)]
print((list))
print("Shortest path btwn 4-1:",nx.dijkstra_path(G,4,1),"=",nx.dijkstra_path_length(G,4,1))
print("Shortest path btwn 4-2:",nx.dijkstra_path(G,4,2),"=",nx.dijkstra_path_length(G,4,2))
print("Shortest path btwn 4-3:",nx.dijkstra_path(G,4,3),"=",nx.dijkstra_path_length(G,4,3))
labels = nx.get_edge_attributes(G,'weight', )
print("Before removing Node 1: ",G.nodes)
nx.draw_networkx_edge_labels(G,pos,edge_labels=labels, )
nx.draw(G, pos, with_labels=True)
plt.show()
plt.clf() #Clears the current figure.
G.remove_node(1) # this line of code remove only vertex, don't forget also remove weights
print("*****************")
print("******************")
print("After removing Node1: ",G.nodes)
nx.draw_networkx_edge_labels(G,pos,edge_labels=labels, )
nx.draw(G, pos, with_labels=True)
plt.show()
我删除Node1之前的图:
我去掉Node1后的图:
之所以画出边的权重,是因为删除节点后权重没有更新。因此,脚本中的 pos
和 labels
应该在删除节点后重新计算:
G.remove_node(1) # this line of code remove only vertex, don't forget also remove weights
labels = nx.get_edge_attributes(G,'weight', )
pos=nx.get_node_attributes(G,'pos')
这是完整的例子:
import networkx as nx
import matplotlib.pyplot as plt
G=nx.DiGraph()
i=1
#Adding nodes to graph
# "pos" is for the location of the nodes
G.add_node(0,pos=(0,5))
G.add_node(1,pos=(10,0))
G.add_node(2,pos=(5,-5))
G.add_node(3,pos=(-5,-5))
G.add_node(4,pos=(-10,0))
# Adding edges each node
G.add_edge(0,4,weight=2)
G.add_edge(0,1,weight=5)
G.add_edge(0,2,weight=3)
G.add_edge(1,3,weight=6)
G.add_edge(1,2,weight=2)
G.add_edge(2,1,weight=1)
G.add_edge(2,3,weight=2)
G.add_edge(4,3,weight=4)
G.add_edge(4,2,weight=10)
G.add_edge(4,1,weight=6)
pos=nx.get_node_attributes(G,'pos')
list = [nx.dijkstra_path(G,4,1,6),nx.dijkstra_path(G,4,2,10),nx.dijkstra_path(G,4,3,4)]
print((list))
print("Shortest path btwn 4-1:",nx.dijkstra_path(G,4,1),"=",nx.dijkstra_path_length(G,4,1))
print("Shortest path btwn 4-2:",nx.dijkstra_path(G,4,2),"=",nx.dijkstra_path_length(G,4,2))
print("Shortest path btwn 4-3:",nx.dijkstra_path(G,4,3),"=",nx.dijkstra_path_length(G,4,3))
labels = nx.get_edge_attributes(G,'weight', )
print("Before removing Node 1: ",G.nodes)
nx.draw_networkx_edge_labels(G,pos,edge_labels=labels, )
nx.draw(G, pos, with_labels=True)
plt.show()
plt.clf() #Clears the current figure.
G.remove_node(1) # this line of code remove only vertex, don't forget also remove weights
labels = nx.get_edge_attributes(G,'weight', )
pos=nx.get_node_attributes(G,'pos')
print("*****************")
print("******************")
print("After removing Node1: ",G.nodes)
nx.draw_networkx_edge_labels(G,pos,edge_labels=labels, )
nx.draw(G, pos, with_labels=True)
plt.show()